Jquery +(正则表达式?)用字符串中的img替换文本

时间:2015-07-16 21:19:18

标签: jquery regex

我想用一个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>

1 个答案:

答案 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">');