剥离除文本和特定属性值之外的HTML

时间:2016-01-02 22:13:03

标签: javascript html regex

假设我有以下代码:

<div class="set">
    <span data-prefix="[1]">Duck</span>
    <span data-prefix="[2]">Dog</span>
    <span data-prefix="[3]">Cat</span>
</div>

我需要正则表达式去除除data-prefix的值之外的所有HTML。

所以预期的输出应该是:

[1]Duck[2]Dog[3]Cat

我无法弄清楚如何做到这一点,我该怎么办?

3 个答案:

答案 0 :(得分:2)

不要使用regular expressions to parse HTML。在这种情况下,您可以简单地使用JavaScript。

使用data-prefix属性迭代元素,并使用dataset.prefix访问属性值。然后将其与textContent属性值连接:

var elements = document.querySelectorAll('.set > [data-prefix]'),
    result = '';

for (var i = 0; i < elements.length; i++) {
  result += elements[i].dataset.prefix + elements[i].textContent;
}

console.log(result); // [1]Duck[2]Dog[3]Cat

如果你必须使用正则表达式,我想你可以使用以下内容:

/(?:<span data-prefix="([^"]+)">([^<]+)<\/span>)+/g

它将返回以下内容:(example)

1) ([1])(Duck)
2) ([2])(Dog)
3) ([3])(Cat)

答案 1 :(得分:1)

free()

现在你有一个n数组,其中包含你需要的所有值。

答案 2 :(得分:0)

  

但是我确实有没有数据前缀属性的跨度。我怎样才能将结果包含在

此代码JS Fiddle选择父span中的所有div.set,抓取其属性data-prefix,如果它在那里则输出它,否则输出{{} 1}}而不是

[-]
var divSpans = document.querySelectorAll('.set > span');

for (var i = 0; i < divSpans.length; i++) {
  var prefix = divSpans[i].getAttribute('data-prefix'),
    divHTML = divSpans[i].textContent;

  prefix = (prefix) ? prefix : '[-]';

  divSpans[i].innerHTML = prefix + divHTML;

}