JavaScript .replace()只替换最后一个匹配?

时间:2012-10-10 18:28:03

标签: javascript regex node.js

似乎JS只替换了正则表达式字符串的最后一个匹配项。我的正则表达式很可能是错误的。

var data = "<div class=\"separator\" style=\"clear: both; text-align: center;\"><img border=\"0\" src=\"https://lh3.googleusercontent.com/-dJnr7dsB21Y/UEhijTGNweI/AAAAAAAAA_w/DWiWYDOHXBA/s640/blogger-image-438529929.jpg\" /></div><div class=\"separator\" style=\"clear: both; text-align: center;\"><img border=\"0\" src=\"https://lh4.googleusercontent.com/-B3wU95K7DLI/UEhiuu75V-I/AAAAAAAAA_4/lxzGd2WajNE/s640/blogger-image-1479348845.jpg\" /></div>";
var regex = /<img (.*)src=\"(.*)\" (.*)\/>/g;
console.log("Before: "+data);
console.log("After: "+data.replace(regex, "[$2]"));

输出以下内容;

Before: <normal before string>
After: <div class="separator" style="clear: both; text-align: center;">[https://lh4.googleusercontent.com/-B3wU95K7DLI/UEhiuu75V-I/AAAAAAAAA_4/lxzGd2WajNE/s640/blogger-image-1479348845.jpg]</div>

(仅返回最后一张图片)

顺便说一下,这是node.js。

1 个答案:

答案 0 :(得分:4)

这是因为你使用的是与标签结尾相匹配的贪婪匹配。

请改为尝试:

var regex = /<img ([^>]*)src="([^"]*)" ([^>]*)\/>/g;

而不是(。*),我使用了([^>] )或([^“] ),它们被称为否定字符类,而否定字符类匹配的范围是不包括字符类中列出的字符。

编辑:根据Felix的评论,删除了双引号,赶上了捕捉!