javascript 正则前瞻匹配如何理解?
前瞻匹配不好理解。具体的匹配过程是啥,请详解。
比如,如下的代码运行结果,我就想不通啊。
var reg=/[a-z]+(?!coder).*/g;
'abcoder'.match(reg);//["abcoder"]
var reg=/(?!coder)/g;
'abcoder'.match(reg);//["", "", "", "", "", "", ""]
'quip'.match(/q(?=u)i/);//null,why?
山咲砂賀瑠
10 years, 4 months ago
Answers
'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
咯。
斌斌吃辣吃到爽
answered 10 years, 4 months ago