求一段js正则表达式
我有一段html代码,要把里面的几个文字替换成链接,而如果这些字符是html标签的属性,则不替换。如:
html
测试seo信息<img src="/aaseobbc.jpg" width="140" height="140" alt="" />
比如,我要替换里面的seo为
<a href="http://www.test.com/">seo</a>
。替换前面的,而不替换后面的图片地址里面的那个。
我写了一段可以正常的替换这个:
javascript
var str='测试seo信息<img src="/aaseobbc.jpg" width="140" height="140" alt="" />'; str.replace(/([^<]*)(seo)([^>]*)/g,'$1<a href="http://www.test.com">$2</a>$3')
但是碰到一段类似
seoseoseoseo
这样的就只能替换最后一个了。
还有就是
a标签
内部的也是不用替换的。都帮忙啊,谢谢啦!
已解决,解决思路是,先不论上面的那些规则,统一的都替换掉,然后再把替换错了的用两个正则替换回来,相关代码如下:
javascript
function replaceTags(content,tag,link){ tag=tag.replace(/\\/g,"、").replace(/\//g,"\\/"); //全部替换掉 var reg=new RegExp(tag,"gi") content=content.replace(reg,link) //把标签里面的属性再替换回来,因为有可能不存在,所以用了try catch,下同 var mcs=/(<[^<|>]+)(<a[^>]*>([^<]*)(<\/a>))([^<|>]+>)/gi.exec(content); try{ content=replaceAll(content,mcs[0],mcs[1]+mcs[3]+mcs[5]); }catch(e){} //把a标签里面的都替换回来。 var mcs2=/(<a[^>]*>[^<]*)(<a[^>]*>)([^<]*)(<\/a>)([^<]*<\/a>)/.exec(content); try{ content=replaceAll(content,mcs2[0],mcs2[1]+mcs2[3]+mcs2[5]); }catch(e){} return content; }
上面的代码里面有个
replaceAll
方法,是用asp实现的,这样就不用js的正则了。
另外多谢大家的帮助!^_^!
tascar
10 years, 7 months ago