假设我有以下代码:
<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
我无法弄清楚如何做到这一点,我该怎么办?
答案 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;
}