2011-07-28 145 views
0

也許我錯過了一些東西,但是這個正則表達式有什麼問題?正則表達式星號

var str = "lorem ipsum 12345 dolor"; 
var x = /\d+/.exec(str); 
var y = /\d*/.exec(str); 
console.log(x); // will print 12345 
console.log(y); // will print "" but why ? 

能否請您解釋一下爲什麼/\d*/.exec(str);返回一個空字符串,而不是「12345」。 *表示零次或多次匹配。

+1

根據http://regexpal.com/,使用「lorem ipsum 12345 dolor」和「\ d *」作爲字符串/正則表達式,它匹配得很好......您使用哪種語言的正則表達式? – Nightfirecat

+0

@Nightfirecat - 看起來像JavaScript。 –

回答

6

\d*匹配一行中的零個或多個數字。當您在正則表達式上運行exec時,它會從輸入的開始處開始並返回第一個實例,它將找到您的給定模式。

那麼該字符串中的第一個\d*是哪裏?那麼,它是字符串中的第一個位置,它後面有個零個或多個個數字。但他們所有後面有零個或更多數字!要麼那裏有數字,要麼沒有數字,但要麼匹配。所以\d*的第一個實例只是一個從字符串中第一個位置開始的零長度子串。

+0

非常感謝,這解釋了一切。 – alagar

+0

@Tim Pietzcker - 感謝您接收我的錯字! –

1

*匹配零個或多個。也許我錯了,但不會匹配從「lorem」開始的零數字,因此空字符串?

+1

不,你沒有錯。 ;) –