2012-10-20 24 views
0

爲什麼這些返回nullJavaScript的正則表達式不起作用

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)/; 

+0

對不起,我搞砸了後視和前瞻模式 – static

回答

4
(?=...) 

是正規表達式「前瞻」的功能,因此這裏是你的正則表達式的意思是:

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

這兩項並不在你的字符串存在,所以你沒有比賽。

1

讓我們拿你的正則表達式/is(?=bbb)/。在你表達的開始想象一點點caret(插入符是閃爍的字母之間的線,顯示你的文本光標是 - 這是它指向一個字母后頭):

is(?=bbb) 
^ 

我們期待在小i你的字符串。我們在字this中找到一個。脫字符轉換:

is(?=bbb) 
^ 

下一個字母是s?確實是。脫字符號再次移動:

is(?=bbb) 
^

現在發生了一些有趣的事情。現在我們檢查下一封信是否爲b。但是,即使我們發現它,我們也不會推進這個脫口秀。

如果匹配的子表達式bbb最後才插入符提前匹配括號後的字符(但是,通過子表達式匹配的文本中不包含匹配字符串中):

id(?=bbb) 
     ^

遺憾的是沒有在你的字符串中is之後是bbb。這就是爲什麼你得到null