前瞻匹配不好理解。具体的匹配过程是啥,请详解。
比如,如下的代码运行结果,我就想不通啊。
var reg=/[a-z]+(?!coder).*/g;
'abcoder'.match(reg);//["abcoder"]
var reg=/(?!coder)/g;
'abcoder'.match(reg);//["", "", "", "", "", "", ""]
'quip'.match(/q(?=u)i/);//null,why?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
'abcoder'.match(/[a-z]+(?!coder).*/g);这句表示的是:
[a-z]+匹配得到非coder结尾的最大的一个字符串,即abcoder,然后.*匹配后头剩余的内容。你可以测试下这个例子,对这个解答有帮助'啦啦啦codeCODERcoder哈哈'.match(/[a-z]+(?!CODER).*/g)'abcoder'.match(/(?!coder)/g);零宽断言表示的只是匹配的位置,由于你没有在前面用字符提出匹配内容,所以匹配的所有结果都为空,但是因为
g的原因会匹配7次(字符串的长度),所以会有7个空字符串。'quip'.match(/q(?=u)i/);这句表示的是:匹配
u前面的q,同时这个q随后应该是一个i。很明显没有这种情况的字符串,当然是null咯。http://www.regexper.com/
这个网站很好玩
http://jsfiddle.net/JCK9K/
引用一段正则教程的原文:
这种前向断言和后向断言,可以用正则表达式的交集、差集操作实现,nark正则引擎实现了通用的交、差操作
补充一下第二个,如果第二个后面没有全局匹配的标记,只会得到一个空数组,因为有全局匹配,lastIndex属性就会生效,会从上次匹配到位置最后一个字符的下一个字符依次向后匹配,即从索引为0,1,2,3,4,5,6的字符位置都匹配一次,共七次。直至字符串结束。