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

时间:2012-03-30 11:01:43

标签: 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){ //what do i do here??? });

所以,如果我有:

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'不是数组的键,因此不会被替换。

任何帮助表示感谢,提前谢谢。

2 个答案:

答案 0 :(得分:1)

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>"

答案 1 :(得分:1)

在这种情况下,我会忘记正则表达式,如果你有一个包含所有url的数组及其在对象中的单独替换,为什么不这样做:

for (i in replaceObj)
{
    html = html.split(i).join(replaceObj[i]);
}

在控制台中尝试了它:

html = '<div><img src="imgs/img.jpg"/></div>';
replaceObj = {};
replaceObj['imgs/img.jpg'] = 'file';
for(i in test){html = html.split(i).join(replaceObj[i])};

输出:<div><img src="file"/></div>。您可以在src="'+i'"'上拆分并连接。加入到安全方面时也一样......但最重要的是:保持简单,只要你能