2014-10-29 134 views
1

我有一個變量,貪婪行爲

var inp = "B123213"; 

現在,當我申請了下面的正則表達式,

var rg = /\d+/; 

,並執行Stringmatch操作,

console.log(inp.match(rg)); 

我得到輸出爲123213,表示表達式是貪婪的。但是,當我使用*而不是+時,表達式不會返回匹配項。請幫我理解爲什麼返回空匹配。它不應該返回相同的結果。

由於醫生說約?

如果之後的任何量詞*,+,?,或{}的立即使用,使得 量詞非貪婪(匹配儘可能少的字符), 而不是默認的,這是貪婪的(儘可能多地匹配 個字符)。例如,應用/ \ d + /到「123abc」 匹配「123」。但是應用/ \ d +?/到相同的字符串只匹配 「1」。

我認爲只有在應用/\d*?/時纔會有空的匹配。當*使用它

+2

學習和玩正則表達式的一個很棒的網站是http://regex101.com/我幫助我大大學習和玩正則表達式。 – 2014-10-29 18:44:52

回答

4

您的字符串更改爲123213,它會匹配所有的數字。

除非必須,發動機不會前進。

這看到了B 123213,它可以匹配nothing\d*在該位置,
它確實是這樣。

所以,它真正的位置第一,量詞第二。

+0

**發動機不會前進,除非必須。**這是現貨,+1 – anubhava 2014-10-29 18:55:28

3

返回三個matches.One空和第二相同一個由+ .The空是由於這樣的事實:當字符串被消耗\d*可以在結束時和在開始爲空字符串匹配返回你會得到第一場比賽。讓它成爲一個組,看看所有的比賽。

請參閱演示。

http://regex101.com/r/gT6kI4/2

+0

將退出組。但即使如此,與最高元素的比賽應該已經返回,我錯了嗎? – BatScream 2014-10-29 18:54:47

+0

OP在他的正則表達式中沒有'g'標記 – anubhava 2014-10-29 18:54:47

+0

@BatScream如果你使用'g'標誌,所有的匹配將被返回。只有第一個是空的。參見http://regex101.com/r/ gT6kI4/3 – vks 2014-10-29 18:57:00