我有一个包含一些 html 标记的字符串,如下所示:
var html = "<div>
<img src="http://test.com/image1.png" />
<h1>SOME TEXT</h1>
<img src="http://text.com/image2.jpg" />
</div>";
我想替换 src="..."
内的所有网址
如果我这样做就可以 html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, "SOME_URL");
然后所有 src="..."
变成 src="SOME_URL"
但现在我想用从数组中获取的不同字符串替换每个匹配项,但我遇到了麻烦。
我想我必须使用一个函数来替换,但不知道如何实现它。
类似于:
html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, function ($0, $1){//我在这里做什么? ?? });
所以,如果我有:
var arr = [];
arr['http://test.com/image1.jpg']='file1';
arr['http://test.com/test.jpg']='file3';
上面的 html 字符串将变成:
"<div>
<img src="file1" />
<h1>SOME TEXT</h1>
<img src="http://text.com/image2.jpg" />
</div>"
请注意,“http://text.com/image2.jpg”不是数组的键,因此它不会被替换。
感谢您的帮助,提前谢谢您。
最佳答案
var html = '<div><img src="http://test.com/image1.jpg" />...</div>';
var arr = {
'http://test.com/image1.jpg' : 'file1',
'http://test.com/test.jpg' : 'file3'
}
html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, function ($0, $1){
return ' src="' + (arr[$1] || $1) + '"';
});
console.log(html)
返回
"<div><img src="file1" /><h1>SOME TEXT</h1><img src="http://text.com/image2.jpg" /></div>"
关于javascript regex - 用不同的字符串替换给定表达式的每个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9941700/