我想用一个img替换文本:
<li class='custom'>
<legend>images:</legend>
{[img.png][1desc][2desc]} {[img2.png][1desc2][2desc2}
</li>
我希望它显示为:
<li class='custom'>
<legend>images:</legend>
<img src="img.png" title="1desc - 2desc"/> <img src="img2.png" title="1desc2 - 2desc2"/>
</li>
我正在使用的当前代码(不起作用):
<script>
function textToImg(theImg) {
return theImg.replace(
/\{\s*[\s*(.*?)\s*]\s*[\s*(.*?)\s*]\s*[\s*(.*?)\s*]\s*\}/gi,
'<img src="$1" title="$2 - $3"/>'
);
}
jQuery('li.custom').each(function() {
current = jQuery(this);
IMG = textToImg(current.html());
current.html(IMG);
});
</script>
答案 0 :(得分:0)
我还没有完成jQuery位,因为我已经在我相当老的iPod上构建了我的解决方案,但RegExp部分将完成这一操作。
首先,我将一个小实用函数rall(r,s)
放在一起,它将在正则表达式exec(s)
上多次应用RegExp方法r
。该函数将返回一个数组数组,每个数组都为[whole match,capture1,capture2,capture3,...]
结构。
正则表达式字符串由三个子部分t
组合在一起(请注意双\
:其中一个总是在字符串生成时被吃掉)然后由{转换为正则表达式{1}}。
使用JavaScript数组方法new RegExp(string, flags)
和map()
我最终将其转换为字符串,然后将其存储回原始字符串join()
(请参阅控制台输出)。
s
注意到我将输出配置与您的输出略有不同。我把它放在你身边。 ; - )
修改强>
玩过我的小实用功能并让它发挥作用是一件事......
但是 - 使用上面的正则表达式(这里:直接写出来)
var t,r,s='{[img.png][name1][desc1]} {[img2.png][name2][desc2]}';
function rall(r, s) { // utility: apply r.execs(s) multiple times
var a=[],t,g=r.global;
do {t=r.exec(s);if (!t) break;
a.push(t);} while (g);
return a;
}
t='\\s*\\[\\s*(.*?)\\s*\\]';
r=new RegExp('\\{'+t+t+t+'\\s*\\}','g');
s=rall(r,s).map(function(f){
return '<img src="'+f[1]+'" title="'+f[2]+'">'+f[3];
}).join('<br>\n');
console.log(s);
只需拨打一次r=\{\s*\[\s*(.*?)\s*\]\s*\[\s*(.*?)\s*\]\s*\[\s*(.*?)\s*\]\s*\}/g;
电话即可完成整个事情:
String.replace()
这将产生
s.replace(r,'<img src="$1" title="$2 - $3">');