JavaScript RegExp不起作用

时间:2012-10-20 20:49:17

标签: javascript regex match

为什么这些返回null

var str="Is this all abc bbb c is";
var patt1=/is(?=bbb)/;

var str="Is this all abc bbb c is";
var patt1=/is(?=bbb)/;

var str="Is this all there is";
var patt1=/is(?=all)/; // <------ (?=all) vs (? =all)

但这会返回is

var str="Is this all there is";
var patt1=/is(?= all)/;

2 个答案:

答案 0 :(得分:4)

(?=...)

是正则表达式“预见”功能,所以这是你的正则表达式的含义:

/is(?=bbb)/ //look for isbbb and return is
/is(?=all)/ //look for isall and return is

这两个字符串中都不存在,因此您没有匹配。

答案 1 :(得分:1)

我们来看看你的正则表达式/is(?=bbb)/。想象一下表达式开头有一点caret(插入符号是字母之间的闪烁线,表示文本光标所在的位置 - 它位于指向的字母后面):

is(?=bbb)
^

我们在你的字符串中寻找一个小的i。我们在单词this中找到一个。插入符号转移:

is(?=bbb)
 ^

下一个字母是s吗?确实是。插入符号再次转移:

is(?=bbb)
  ^

现在发生了一些有趣的事情。现在我们检查下一个字母是否为b。然而,即使我们发现它,我们也不会推进插入符号。

如果我们匹配子表达式bbb,那么插入符号会在匹配的括号之后前进到字符(但是子表达式匹配的文本不包含在匹配的字符串中):

id(?=bbb)
         ^

很遗憾,is后面的bbb字符串中没有null。这就是你获得{{1}}的原因。