javascript regex - 用不同的字符串替换给定表达式的每个匹配项

标签 javascript regex

我有一个包含一些 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/

相关文章:

javascript - JQuery 滚动在 Internet Explorer 或 Firefox 中不起作用

javascript-events - 选中了多少个复选框

javascript - 正则表达式通过其前缀匹配句子中的单词

python - 在 Python 中解析上下文无关文法

c# - 使用正则表达式将字符串拆分成句子

Python 正则表达式 : why does this not work?

javascript - 附加包含 javascript 资源的 html 时了解 JS 加载

javascript - 对空选择执行命令

javascript - Testcafe t.typeText 使用 { 粘贴 : true } by default

python - 使用正则表达式搜索单词的开头