2017-06-16 51 views
0

根據MDN x* : *Matches the preceding item x 0 or more times.*Regex的星號的使用

本質前述字符應該是完全可選的。字符串會被匹配,無論它們是否存在。那麼,爲什麼說:

var text = "foobar"; 
var re = /q*/; 
var found = text.match(re); 
console.log(found); // prints '["", index: 0, input: "foobar"]' 

var re = /qz*/; 
console.log(found); // prints 'null' 

兩個表達式同樣不存在,因此應匹配0次,「‘’」應該是回。

或者:

2.

var re = /fz*/; 
console.log(found); // prints '["f", index: 0, input: "foobar"]' 

var re = /fzq*/; 
console.log(found); // prints 'null' 

這裏發生了什麼?從我的理解'fzq'不存在,所以應該匹配0次,''''應該返回,對吧?如果它以某種方式匹配每個字符而不是整個字符串,則'fzq*'應返回與'fz'相同的結果 - 'f'匹配一次,其餘匹配0次。但顯然這不是發生了什麼事情。

難道有人會對這裏發生的事情有所瞭解嗎?

回答

2

x *:匹配前一項x 0或更多次。

你誤會了這一說法與一切*之前匹配零次或多次。

當您匹配q*時,正則表達式將在輸入字符串中搜索q。由於foobar中沒有q,它將返回一個空字符串。

當您嘗試匹配qz*,正則表達式將嘗試q後搜索任意數量的z秒。由於輸入字符串中沒有q,它將返回null

要匹配更多的字符*或任何其他量詞,您需要使用圓括號對它們進行分組。

(qz)* 

這意味着,匹配字符串qz零次或多次。

要了解正則表達式,您可以使用https://regex101.com/網站。