代码之家  ›  专栏  ›  技术社区  ›  Souvik Ray

如何在html标记中获取内容,包括在javascript中使用regex的标记?

  •  0
  • Souvik Ray  · 技术社区  · 5 年前

    我在下面有文字-

    how  much  production  in  batu
    

    现在,此文本显示为一系列 html 标签。基本上每个单词都用 span 有一个特定的 style class . 这是它的样子

    '<span style="">how &nbsp;</span><span style="">much &nbsp;</span><span class="pink-highlight">production &nbsp;</span><span style="">in &nbsp;</span><span class="yellow-highlight">batu</span>'
    

    现在我想要两样东西 html格式 字符串:范围内的样式或类和内容(不带 &nbsp; )

    所以我想要一个 array 字符串中的以下信息

    [["", "how"], ["", "much"], ["pink-highlight", "production"], ["", "in"], ["yellow-highlight", "batu"]]
    

    现在可以使用 regex . 但我不太熟悉 正则表达式 . 我能想到的模式

    <span>(.*?)</span>
    

    但它只会发现里面的内容 跨度 而且在这种情况下都不起作用 跨度 有一个 风格 标签或类。

    那又怎么样 正则表达式 在这种情况下,最好应用它来获得期望的结果吗?

    1 回复  |  直到 5 年前
        1
  •  2
  •   epascarello    5 年前

    使用reg exp可能无法匹配HTML。将其解析为HTML并获取数据非常容易。

    var html = '<span style="">how &nbsp;</span><span style="">much &nbsp;</span><span class="pink-highlight">production &nbsp;</span><span style="">in &nbsp;</span><span class="yellow-highlight">batu</span>'
    
    var temp = document.createElement('div')
    temp.innerHTML = html
    var data = Array.from(temp.querySelectorAll('span'))
      .map(span =>
        ([
          span.getAttribute("style") || span.getAttribute("class") || '', span.textContent.trim()
        ])
      )
    console.log(data)
        2
  •  0
  •   Gary Chen Jason Powell    5 年前

    我将提供一个简单的正则表达式。实际上,我又增加了两个选项。

    (<span>(.*?)<\/span>)|(<span style=".*?">(.*?)<\/span>)|(<span class=".*?">(.*?)<\/span>)