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

标签 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。

最佳答案

这是因为您使用了贪婪匹配来匹配标签结尾之后的内容。

试试这个:

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

我使用 ([^>]) 或 ([^"]) 代替 (.*),它们被称为否定字符类,并且否定字符类匹配的范围不包括字符类中列出的字符。

编辑:根据菲利克斯的评论,删除了转义双引号,谢谢!

关于JavaScript .replace() 只替换最后一个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12825946/

相关文章:

python - Is_prime 函数通过 python 中的正则表达式(来自 perl)

javascript - 回调不是一个函数(但它是)

node.js - 用 Sinon 模拟 AWS SES

javascript - 了解控制台错误 "TypeError: undefined is not an object"和 "Uncaught TypeError: Cannot read property ' 0' of undefined"

javascript - Firebase 和 Backbone : Trouble using uid as a key

python - 匹配一个单词中的多个双字符 - Python regex

Python 使用正则表达式替换

javascript - 以编程方式创建 aws API key 并将其添加到单一功能的使用计划中?

javascript - 如何设置全局单击监听器以从多个按钮获取值?

javascript - 重定向原因: Can't Set Headers After They Are Sent