2009-08-27 79 views
0

你們能幫我弄清楚這個嗎?我有以下的JavaScript代碼片段:JavaScript RegExp問題

pattern = new RegExp('^bla*a', 'i'); 
console.debug(pattern.exec('blatr')); 

我運行這個後,輸出是[「bla」]。 我解釋這個正則表達式的方式是這樣的:找到一個以'bla'開頭並以'a'結尾的字符串,它們之間有許多字符。在這種情況下,'blatr'不應與正則表達式匹配,但它確實如此。 我在做什麼錯?

謝謝。

+0

任何原因,我的答案是不(當然,我想純粹知道個人學術分析) – aditya 2009-09-07 10:24:18

回答

0

一個*在表達一個零次或多次匹配前面的字符,不是字符串BLA。你需要使用括號。試試這個:

new RegExp('(^bla){1}.+a$', 'i'); 

編輯:在一個字符串的開頭相匹配的表達式中使用+號點。此外,既然你說你想匹配blaa之間的任何字符,你需要使用+後的+號。

編輯:咳咳,看來一個人不需要括號無論是作爲其他的答案顯示。注意自己:在發佈之前停止過度設計您的RegEx並測試您的答案。 :P這很好:

new RegExp('^bla.+a$', 'i'); 
4

'*'表示前面的字符的{0,}或「0或更多」。你想要做什麼應該是

^bla.*a$ 

編輯:錯過了的問題,早期部分「與‘A’結束」。

+1

只需追加$到這個正則表達式的結尾,否則它也會匹配「blatraddd」 – Kamarey 2009-08-27 10:28:32

+0

錯過了問題中的那個部分。 – aditya 2009-08-27 12:51:58

0

你的正則表達式匹配的字母bl在該行之後的零個或更多a的開始的,然後一個a(其等同於一個或多個a的)與有可能以下的字符。 blatr匹配。

做你想要做什麼(如果我理解正確的話,可以使用:

'^bla.*a'

*方法重複前面的字符零次或多次