日期:2014-05-16  浏览次数:20432 次

javascript 正则表达式 替换问题
我想在一篇文章的某些关键字上添加链接,
可是这些关键词很相识,比如:上海市,上海等
当我第一次(循环)替换上海市完成后:
...... <span   name=...> <a   href=...> 上海市 </a> </span> ...
然后第二次(循环)替换上海就不对了,变成了:
...... <span   name=...> <a   href=...> <span   name=...> <a   href...> 上海 </a> </span> 市 </a> </span> ...

我想在每次替换的时候忽略掉已经有 <span> 的词,这样只要先替换字数多的
然后替换字数少的就不会有问题,可是正则表达式怎么写都不对

str.replace(/[^ <span[^> ]+> ][/s][/S]+[^ <\/span]|上海/,   ' <span   name...> <a...> 上海 </a> </span> ')
这个不对,怎么不对很难表达清除,可以试一试

就是说,正则表达式怎么写才能忽略掉已经有链接的,
并把没有链接的关键词替换成链接

不知道我有没有表达清除!

------解决方案--------------------
是这个意思吗?
str.replace(/(上海)[^市]/gi, ' <span name...> <a...> $1 </a> </span> ')
------解决方案--------------------
结果如期待(不支持已经有嵌套的 <a> 元素。。

<script type= "text/javascript ">
var strng = "上海市,上海等, <a> 上海等 <\/a> ";
var key = [ "上海市 ", "上海 "]
var reg = new RegExp( "( <a> (?:.|\\n|\\r)+? <\\/a> )|( " + key.join( "| ") + ") ", "ig ");
var j = strng.replace(reg, function (a, b, c) {
return b ? a : " <a newURL> " + a + " <\/a> ";
});
alert(j);
</script>
------解决方案--------------------
差不多这样
str.replace(/(上海)( <[^> ]+> )*市/gi, ' ')
不过还得具体问题具体看

------解决方案--------------------
忽略span里的关键字
var reg = new RegExp( "( <a> (?:.|\\n|\\r)+? <\\/a> )|( " + key.join( "| ") + ") ", "ig ");
把a换成span就可以了。。
只不过这个不支持嵌套。。