我有这个正则表达式
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<"
。如何在网站上捕获所有内容?
这不重复。我不使用查询字符串,除了它在网站上工作。
答案 0 :(得分: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);
&#13;
答案 1 :(得分:4)
.exec()
方法仅返回第一次出现,如果要返回所有出现次数,请使用 .match()
:
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);
&#13;
答案 2 :(得分:3)
您应该将HTML文本转换为DOM并解析它。
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);
&#13;
您可以使用string#match
。
var reg = new RegExp('["\\>]{1}\\$([^"\\<\\> ]*)["\\<]{1}', 'g');
var match = '<span>$name</span><img src="$images[0].src"><img src="$images[1].src"><img src="$images[2].src">'.match(reg);
console.log(match);
&#13;