2014-11-22 102 views
0

我是JS RegExp的新手。我對以下RegExp匹配感到困惑。JS RegExp捕獲圓括號

var x = "red apple"

var y = x.match(/red|green/i)

現在y["red"]

但是如果我添加一對括號周圍red和​​,使Y中

var y = x.match(/(red|green)/i)

現在,y將成爲["red", "red"]。我在網上搜索了https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp ,發現它是所謂的 捕獲括號

它說For example, /(foo)/ matches and remembers 'foo' in "foo bar." The matched substring can be recalled from the resulting array's elements [1], ..., [n] or from the predefined RegExp object's properties $1, ..., $9.

但我不明白這是什麼由recalled from the resulting array's element or from predefined RegExp object's properties是什麼意思?任何人都可以解釋嗎?謝謝!

+0

嘗試使用全局搜索 – aviel 2014-11-22 17:05:09

回答

3

這意味着(來自capturing group獲得)匹配結果能夠通過參照該特定組編號[1][n] ..其中n表示要訪問捕獲組的數量被訪問。

注意:[0]適用於總體匹配結果。

var r = 'red apple'.match(/(red|green) apple/i); 
if (r) 
    console.log(r[0]); //=> "red apple"  # entire overall match 
    console.log(r[1]); //=> "red"    # match result from 1st capture group 
+1

謝謝!現在已經很清楚了! – SSDong 2014-11-22 17:19:25

0

使用此

var y = x.match(/(red|green)/gi); 

答案是

y = ["red"] 
+0

這個問題不是關於如何匹配,而是要求解釋捕獲組 – nu11p01n73R 2014-11-22 17:12:24

1

當比賽結果被存儲到(在這種情況下)yy[0]總是整體搭配,而y[1] .. y[9]包含各個捕獲組。

/(red|green) apple/中,應用於"This is a red apple.",y將是["red apple", "red"]

+0

感謝您的簡短但真棒解決方案! – SSDong 2014-11-22 17:23:37