Home  >  Q&A  >  body text

javascript - js正则表达式 长度无法定位

var p=/(8[a-z]{3}0)+/;

var str='8asd08asd08asd08asd0';

alert(str.replace(p,'*'))

这里默认的贪婪模式怎么都匹配到了呢?不是应该匹配4次么 里面的a-z的定位长度没作用呢 非贪婪是能匹配一个的

阿神阿神2767 days ago614

reply all(4)I'll reply

  • PHP中文网

    PHP中文网2017-04-11 13:06:30

    因为你用了+啊,(8[a-z]{3}0)这个片段重复一次及以上,会被匹配到一起的。
    你想要这一个片段匹配多次,改成这样就行了:

    var p=/8[a-z]{3}0/g;

    reply
    0
  • 阿神

    阿神2017-04-11 13:06:30

    贪婪模式并不是按你说的匹配4次,是把能匹配的都匹配到。所以,你这儿的贪婪匹配把整个str都匹配了,整个儿替换成*了。
    要实现你的效果:不贪婪,全局匹配就好。

    var p=/(8[a-z]{3}0)/g;
    
    var str='8asd08asd08asd08asd0';
    
    console.log(str.replace(p,'*'));

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-11 13:06:30

    var p=/(8[a-z]{3}0)/g;
    
    var str='8asd08asd08asd08asd0';
    
    alert(str.replace(p,'*'))

    这样?返回**,是不是你要的结果?

    reply
    0
  • PHP中文网

    PHP中文网2017-04-11 13:06:30

    从代码看 (8[a-z]{3}0) 这块内容至少匹配1次;
    经过贪婪匹配 8asd08asd08asd08asd0 会一次全都匹配;

    如果想匹配4次就用

    /8[a-z]{3}0/g

    reply
    0
  • Cancelreply