<script>
str = "ddWindows ddscript ddWindows ddWindows"; 
newstr = str.replace(/dd(?=script)/g,"mm"); 
document.write(newstr) 
</script>结果是ddWindows mmscript ddWindows ddWindows 但换个位置又正常
为什么呢

解决方案 »

  1.   

    (?!abc).* 表示不匹配abc开头的
    但在abcdefg这个字符串中 bcdefg却符合要求 为什么呢? 
    因为 bcdefg不是abc开头 因为它是bcd开头
      

  2.   

    按楼上的例子
    也就是说abcdefg匹配后
    就又从a开始匹配,即bcdefg?
    而一般的正则由于.*应该是整个匹配了的吧就不会再进行匹配?
    我理解的对不对呢说实话我一直看不懂哪句
    找到一个匹配后,紧接匹配到的文字(而不包括预查中使用的字符)就开始对下一次匹配的搜索
    是不是就是这个意思呢
      

  3.   

    <script>
    str = "scriptdd"; 
    newstr = str.replace(/(?=script)dd/g,"mm"); 
    document.write(newstr) 
    </script>但这里明明就有scriptdd
    为什么没有替换呢
      

  4.   

    (?=script)是非获取查询 即scriptdd (/(?=script)dd/g 只匹配前面是script的dd 但不匹配script
      

  5.   

    匹配前面是script的dd 
    scriptdd
    这不就是了吗
    但没有转换啊
      

  6.   

    1.5.5 前瞻
      运用前瞻可以告诉正则表达式运算器向前看一些字符而不移动其位置,包括正向前瞻和负向前瞻,正向前瞻检查的是接下来出现的是不是某个特定字符集,而负向前瞻则是检查接下来的不应该出现的特定字符集。创建正向前瞻要将模式放在(?=和)之间。创建负向前瞻要将模式放在(?!和)之间。::::正向前瞻检查的是{ { 接下来 } }出现的是不是某个特定字符集,而负向前瞻则是检查{ { 接下来的 } }不应该出现的特定字符集。(?=script)必须在某个东西的后面,那怕是空格就是说
      

  7.   

    str = "Windowsdd scriptdd Windowsdd Windowsdd";
    newstr = str.replace(/ (?=script)/g,"mm"); 
    alert(newstr);如上 ,注意/ (?=script)/这前面有个空格,这就吧控格替换成了mm
      

  8.   

    如上,空格接下来出现的是script,就把空格替换
      

  9.   

    按mingxuan3000的说法
    那就是说(?=)(?!)只能是放在最后咯<script>
    str = "Windowsdd scriptdd Windowsdd Windowsdd"; 
    newstr = str.replace(/(?!script)dd/g,"mm"); 
    document.write(newstr) 
    </script>
    但为什么没有报错呢
    也确实是替换了
    虽然不是预期那样
    如果按gzdiablo的说法这里也就说得通了
    但?=的时候就又说不通到底谁说的才对啊
      

  10.   

    终于明白
    /(?=script)/代表的是紧跟着是script的那个空字符
    所以所有script前面都会添加一个mm
    /(?=script)dd/之所以没有匹配是因为在匹配了(?=script)之后
    是从script中的s开始匹配dd所以永远也不会匹配到
    如果换成/(?=script)sc/那么所有script中的sc都会替换成mm即mmript想了一天终于明白了
    在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串
    是什么意思了
      

  11.   

    在SQL中,取出一个字段的一部分,函数是什么哦
    比如:123456789,要取出12345,要更新的是批量的
      

  12.   

    不管执行正向还是反向预测,匹配的都是在后面的;
     如
      Windows (?!95|98|NT|2000) 匹配之外,反向
      Windows (?=95|98|NT|2000) 匹配之内,正向它只能匹配后面的,不能是前面的,如:
      (?!my|your) Friend
      (?=my|your) Friend
     这样就不能匹配了。-----它违背了"预测先行搜索"的游戏规则.你看了下面这个结果应该就会明白了
    str = "Windowsdd scriptdd Windowsdd  sdfasdfasdd Windowsdd";
    newstr = str.replace(/(?=Windows)/g,"mm"); 
    --------------------------
    mmWindowsdd scriptdd mmWindowsdd  sdfasdfasdd mmWindowsdd
      

  13.   

    不管执行正向还是反向预测,匹配的都是在后面的;
    -----
    搞错了。 应该是说比较的。
    如:
    Windows (?!95|98|NT|2000)匹配的 是"Windows "
    比较的 是"95|98|NT|2000"