2015-09-14 41 views
2

所以下面的正則表達式re適用於JAVA,但不適用於JavaScript。這看起來像一個非常基本的問題。我怎麼能這樣做,[A-Za-z]+部分將在js中是可選的?JavaScript JS可選

var re = /\w+\s+[A-Za-z]+?/g; 
var str = "John Smith"; 
$("#ret1").text(re.test(str)); // true 
$("#ret12").text(re.test("sssa "));// false 

回答

5

要匹配0個或更多字符(如你的意圖似乎是),你需要使用*量詞:

\w+\s+[A-Za-z]* 
      ^

demo

+?量詞要求至少匹配1個字符以上,但儘可能少地返回有效匹配。

我看你很困惑?*?量詞。當添加+?*前者轉成所謂的量詞這意味着他們將匹配0(*)或1(+)字符,然後更多的字符,但儘可能少。下面是從rexegg.com with the quantifiers通過JavaScript引擎支持的摘錄:

A+ - 一個或多個作爲,儘可能多的(貪婪),放棄字符,如果引擎需要回溯(溫順)

A+?一以上作爲,儘可能少的需要,使整體匹配模式(懶惰)

A*零個或多個作爲,儘可能多的(貪婪),放棄字符,如果引擎需要回溯(溫順)

A*?零個或多個如,少至需要允許整體圖案匹配(懶惰)

A?零個或一個A,一個可能的話(貪婪),得到的字符,如果引擎需要回溯(溫順)

A??零個或一個A,零,如果仍然允許整體圖案匹配(懶惰)

+0

K,這是從我一個壞的。我很想知道如何使用'?'使它成爲可選項......謝謝! :D –

+0

我已經使用rexegg.com的數據添加了JS中可用的所有量詞的描述。 –

+0

@MihkelL。 '''確實意味着在一個標記或像colou?r這樣匹配'color'或'colour'的組之後使用可選項。但是,當在另一個量詞之後使用時,它會變成貪婪開關。 [see more](http://www.regular-expressions.info/optional.html) – Qwerty