<script type="text/javascript">
var a='<a   href="http://www.baidu.com.com"   > baidu </a><a   href="http://www.baidu.com.com"   > 12312 </a>'
alert(a.replace(/(<a[^>]*?>)(.*?)(<\/a>)/g,"$1<b>$2</b>$3"))
</script>参考下 ,php的不会

解决方案 »

  1.   

    如果是baid,baidu,baidu,google,baidu<a href="http://www.baidu.com">baidu</a>
    除了www.baidu.com外的baidu都替换为<b>baidu</b>该怎么写?
      

  2.   

    $s = 'baid,baidu,baidu,google,baidu <a   href="http://www.baidu.com"> baidu </a> sdfsdf www.baidu.com ';
    echo preg_replace("/(?<!www\.)(baidu)(?!\.com)/","<b>\\1</b>",$s);
      

  3.   


    <script type="text/javascript">var a='baid,baidu,baidu,google,baidu <a   href="http://www.baidu.com"> baidu </a> '
    alert(a.replace(/(?!www\.)baidu(?!\.com)/g,"<b>baidu</b>"))
    </script>
      

  4.   

    $search  = array("/(.*)([^\.]baidu[^\.])(.*)/", "/(.*)([^\.]baid[^\.])(.*)/", "/(.*)([^\.]google[^\.])(.*)/");
    $replace = "\$1<b> baidu </b>$3";
    $str = '<a   href="http://www.baidu.com.com"   > baidu baid </a><a   href="http://www.baidu.com.com"   > 12312 google </a>';
    $res = preg_replace( $search, $replace, $str );
    exit($res);
      

  5.   

    我的意思是除了标签内容以外的关键字替换。上面少说了一句,明天+100分,麻烦各位再帮下
    如:
    baidu,baidu,baidu,google,baidu <a   href="http://www.baidu.com"> baidu </a>
    baidu,baidu<a href="http://baidu.com">baidu</a>baidubaidu<a href="cache.baidu.cn">摆渡</a>
    .....
    替换为
    <b>baidu</b>,<b>baidu</b>,<b>baidu</b>,<b>baidu</b>,<b>baidu</b> <a   href="http://www.baidu.com"><b>baidu</b></a>
    <b>baidu</b>,<b>baidu</b><a href="http://baidu.com"><b>baidu</b></a><b>baidu</b><b>baidu</b><a href="cache.baidu.cn">摆渡</a>
    ... 
      

  6.   

    还有<a href="http://www.baidu.com">www.baidu.com</a>替换为<a href="http://www.baidu.com">www.<b>baidu</b>.com</a>
      

  7.   

    [code=BatchFile]这需求太乱了。一会说除了www.baidu.com 里的baidu保留之外,其他的baidu 去不替换为<b>baidu</b>.
    一会又<a   href="http://www.baidu.com"> www.baidu.com </a> 替换为 <a   href="http://www.baidu.com">www.<b>baidu</b>.com </a> <b> 。
    [/code]
    到底是什么意思呢?
      

  8.   


    <script type="text/javascript">var a='baidu,baidu,baidu,google,baidu <a   href="http://www.baidu.com"> baidu </a>baidu,baidu <a   href="http://baidu.com"> baidu </a> baidubaidu <a   href="cache.baidu.cn"> www.baidu.com  </a>'
    alert(a.replace(/baidu/g,"<b>baidu</b>").replace(/(<(a|img).*?)<b>baidu<\/b>(.*?>)/g,'$1baidu$3'))
    </script>使用的时候(a|img)这个地方可能要扩展
      

  9.   

    晕哦,csdn怎么了?两个星星的竟然问这种问题
      

  10.   

    to mingxuan3000 我这里用csdn的那个消息总出错,什么信息都看不了...JS的方案...<script type="text/ecmascript">
    var key = "baidu", nkey = "<b>baidu<\/b>";
    var pattern = new RegExp("(<a(?:\"[^\"]*\"|'[^']*'|[^\"'>]+)*>)([\\S\\s]+?)<\\/a>|" + key, "ig");
    var str = 'baidu,baidu,baidu,google,baidu <a   href="http://www.baidu.com"> baidu,baidu </a>baidu,baidu <a   href="http://baidu.com"> baidu </a> baidubaidu <a   href="cache.baidu.cn"> www.baidu.com  </a>'
    alert(str.replace(pattern, function (a, b, c) {
    if (b && c) {
    return b + c.replace(new RegExp(key, "ig"), nkey);
    } else {
    return nkey;
    }
    }));
    </script>
      

  11.   

    貌似PHP里有反向预查,那样的话,很简单的就可以解决了...:D
    飘走...
      

  12.   

    还讨论什么劲?mingxuan的是对的。
      

  13.   

    经测试,mingxuan3000 是对的。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><HTML>
    <HEAD><META http-equiv="Content-Type" content="text/html; charset=GBK">
    <META name="GENERATOR" content="IBM WebSphere Studio">
    <META http-equiv="Content-Style-Type" content="text/css">
    <LINK href="theme/Master.css" rel="stylesheet" type="text/css">
    <TITLE>告示版</TITLE></HEAD>
    <BODY>字符串:
    <p><textarea  id="tt" cols="80" rows="5"></textarea>
    </p>
    替换后字符串:
    <p><textarea  id="tt1" cols="80" rows="5"></textarea>
    </p>
    效果预览:
    <p>
      <div id="tt2"></div>
    </p>
    </BODY>
    <script language="javascript">
    //var key = "baidu", nkey = "<b>baidu<\/b>";
    //var pattern = new RegExp("(<a(?:\"[^\"]*\"|'[^']*'|[^\"'>]+)*>)([\\S\\s]+?)<\\/a>|" + key, "ig");
    var str = 'baidu,baidu,baidu,google,baidu <a   href="http://www.baidu.com"> baidu,baidu </a>baidu,baidu <a   href="http://baidu.com"> baidu </a> baidubaidu <a   href="cache.baidu.cn"> www.baidu.com  </a>'
    var tt=str.replace(/baidu/g, "<b>baidu<\/b>").replace(/(<a.*?)(<b>baidu<\/b>)(.*?>)/g,"$1baidu$3")
    document.getElementById("tt").value=str
    document.getElementById("tt1").value=tt
    document.getElementById("tt2").innerHTML=tt
    </script></HTML>
      

  14.   

    for($i=0;$i<count($keyws);$i++){
             $content=eregi_replace("($keyws[$i])","<span class=\"keyword\">\\1</span>",$content);
     while(preg_match("/(<[^>]*?)<span class=\"keyword\">($keyws[$i])<\/span>([^>]*?>)/i",$content))
     {
         $content=preg_replace("/(<[^>]*?)<span class=\"keyword\">($keyws[$i])<\/span>([^>]*?>)/i","\$1\$2\$3",$content);
     }
    }
    这是我的解决方案,再次感谢各位的支持。
      

  15.   

    晕 这么简单的问题居然没一个像样的回答 这里正则表达式写得最好的应该是muxrwc了
    LZ给分不公啊
    PHP可以使用perl的正则表达式引擎 应该有递归查询的另外这样的替换没必要一定是一条表达式完成.多几次替换能轻松完成所需var str = str.replace(/<[^>]*?baidu[^>]*>/ig,"[key word backup]").replace(/baidu/ig,"<b>baidu</b>").replace(/\[key word backup\]/ig,"baidu");
      

  16.   

    var str = str.replace(/<[^>]*?baidu[^>]*>/ig,"[key word backup]").replace(/baidu/ig,"<b>baidu</b>").replace(/\[key word backup\]/ig,"baidu");
      

  17.   

    //上面的有点问题
    var str = str.replace(/(<[^>]*?)baidu([^>]*>)/ig,"$1[key word backup]$2").replace(/baidu/ig,"<b>baidu</b>").replace(/\[key word backup\]/ig,"baidu");