是这个意思吗?
str.replace(/(上海)[^市]/gi, '<span name...><a...>$1</a></span>')

解决方案 »

  1.   

    结果如期待(不支持已经有嵌套的<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>
      

  2.   

    谢谢:slowhand(早起的鸟儿有虫吃,那么早起的虫子呢?) 
    上海市有链接
    上海也有链接
    而且他们的链接是不同的
    第一次替换上海市的时候没问题
    第二次替换上海的时候就把有链接的也给替换了,如下:
    <span name...><a href=...><span name...><a href=...>上海</a></span>市</a></span>
      

  3.   

    差不多这样
    str.replace(/(上海)(<[^>]+>)*市/gi, '')
    不过还得具体问题具体看
      

  4.   

    谢谢:muxrwc(厕所宣言:信念永不变,追猫永不弃。) 
    正在研究中...
      

  5.   

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

  6.   

    如:muxrwc(厕所宣言:信念永不变,追猫永不弃。) 
    测试成功!!!
    不过还不知所以然,
    下去仔细研究,
    什么贪婪的,看到就头痛,呵呵
    这就给分
      

  7.   

    muxrwc(厕所宣言:信念永不变,追猫永不弃。) 
    知道了,不用span了,把事件都写道a里面就好了再次谢谢
      

  8.   

    var key = ["上海市", "上海"];
    new RegExp("(<a>(?:.|\\n|\\r)+?<\\/a>)|(" + key.join("|") + ")", "ig");
    展开就是
    /<a>(?:.|\n|\r)+?<\/a>|(上海市|上海)/ig;因为这个用的是或运算。所以。。把<a>..</a>的匹配放到前面它就会优先匹配<a>..</a>的内容。。
    即使里面包含关键字也会匹配出来。。如果匹配不到则会继续匹配关键字,然后把匹配的关键字捕获出来,加个链接就可以了。。^o^
      

  9.   

    var reg = new RegExp("(<[^a][^>]*>)("+key.join("|")+")", "ig");
      

  10.   

    string = string.replace(reg,"$1<a href='....'>$2</a>");
      

  11.   

    TO LS 你看错问题了吧。。
      

  12.   

    var reg = new RegExp("(<[^a][^>]*>)("+key.join("|")+")", "ig");
    这个来说的话。。
    首先如果是<a>w__关键字__c</a>就不会替换。如果改成能替换的reg还要大改下。。
    还有。。
    这个只考虑了在<*>后面的关键字。。
    就是说
    <*>关键字,关键字</*>
    第二个就不会被替换。。
    关键字,关键字
    这个,全部都不被替换
    还有如果<a>里套了非<a>的标记也会被替换。。^o^