0

为什么这些返回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)/;

?

4

2 回答 2

4
(?=...)

是正则表达式“前瞻”功能,所以这就是您的正则表达式的含义:

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

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

于 2012-10-20T20:54:13.193 回答
1

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

is(?=bbb)
^

i我们在您的字符串中寻找一个小的。我们在单词中找到一个this。插入符号发生变化:

is(?=bbb)
 ^

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

is(?=bbb)
  ^

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

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

id(?=bbb)
         ^

不幸的是,您的字符串中的任何位置都is没有bbb. 这就是为什么你得到null.

于 2012-10-20T21:12:27.967 回答