正则表达式javascript结果与预期不同[重复]

问题描述 投票:3回答:3

我有这个正则表达式

 var reg = new RegExp('["\\>]{1}\\$([^"\\<\\> ]*)["\\<]{1}', 'g');

我在这个字符串上运行

'<span>$name</span><img src="$images[0].src"><img src="$images[1].src"><img src="$images[2].src">'

如果我在像RegExr这样的网站上进行测试,它可以正常工作,但如果我在FireFox中测试它

var reg = new RegExp('["\\>]{1}\\$([^"\\<\\> ]*)["\\<]{1}', 'g');
var match = reg.exec('<span>$name</span><img src="$images[0].src"><img src="$images[1].src"><img src="$images[2].src">');
console.log(match);

它只匹配">$name<"。如何在网站上捕获所有内容?

这不是重复的。我不使用查询字符串,除了它在网站上工作。

javascript regex
3个回答
5
投票

Regexp.prototype.exec()只返回匹配的第一个匹配项,您必须在循环中调用它才能获得所有匹配项。

更简单的是使用String.prototype.match(),它返回所有匹配的数组。

如果您还需要获取捕获组,则只需使用exec()

var reg = new RegExp('[">]\\$[^"<> ]*["<]', 'g');
var str = '<span>$name</span><img src="$images[0].src"><img src="$images[1].src"><img src="$images[2].src">';
var match = str.match(reg);
console.log(match);

4
投票

.exec()方法仅返回第一次出现,如果要返回所有出现次数,请使用qazxsw poi:


3
投票

您应该将HTML文本转换为DOM并解析它。

var reg = new RegExp('[>"]\\$([^"<> ]*)["<]', 'gm');
var my_string = '<span>$name</span><img src="$images[0].src"><img src="$images[1].src"><img src="$images[2].src">';
var match = my_string.match(reg);

console.log(match);

你可以使用var div = document.createElement('div'); div.innerHTML = '<span>$name</span><img src="$images[0].src"><img src="$images[1].src"><img src="$images[2].src">'; var result = []; result.push(div.querySelector('span').innerText); var src = Array.from(div.querySelectorAll('img')).map(img => img.getAttribute('src')); result = result.concat(src); console.log(result);

string#match
© www.soinside.com 2019 - 2024. All rights reserved.