2012-03-30 40 views
0

取代定表达式的每场比赛我有一个字符串contaning一些HTML标记,像这样:JavaScript的正则表达式 - 用不同的字符串

var html = "<div> 
    <img src="http://test.com/image1.png" /> 
    <h1>SOME TEXT</h1> 
    <img src="http://text.com/image2.jpg" /> 
</div>"; 

我想更换内部src="..."

所有URL这是确定的,如果我做html = html.replace(/[^-]src\=["|'](.*?)['|"]/g, "SOME_URL");
那么所有src="..."成为src="SOME_URL"

但现在我想替换每个匹配不同的字符串,从拍摄n阵列,但我遇到了麻烦。
我想我必须使用一个函数进行替换,但不知道如何实现它。
喜欢的东西:
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'不是数组的关键字,所以它不会被替换。

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

回答

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

完美!我想我应该在那里分配一些东西(例如$ 0 = arr [$ 1];),应该想到返回......谢谢Fabrizio,救了我的一天! – CrisDeBlonde 2012-03-30 11:19:59

+0

很高兴有用。 – fcalderan 2012-03-30 11:23:49

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'"'和concat。加入时一样安全......但底线:保持简单,只要你可以

+1

感谢Elias因为我的问题而烦恼。有趣的方法,但我宁愿不改变我的初始设计,只要这是可能的。再次感谢您的回复;) – CrisDeBlonde 2012-03-30 12:10:49

+0

虽然我不知道你最初的设计,也不想冒风格或冒犯:我唯一遗漏的就是正则表达式,据我所知...我可以'帮助它,真的...只要我看到有人在我不会的情况下使用正则表达式,我必须作出反应...如果您喜欢,请将其称为OCD; - )...祝您的项目顺利! – 2012-03-30 12:19:52

相关问题