2013-11-22 35 views
0
var path = '/user/tobi' 

    path.match(/user/); 
     //result: ["user"] 
    path.match(/(user)/); 
    //result: ["user", "user」] 

爲什麼添加'()',會產生兩個用戶結果?正則表達式path.match(/ user /);

+1

http://www.ultrapico.com/expresso.htm使用這個免費工具來了解任何複雜的正則表達式 – Surender

回答

1

因爲捕獲它們的內容是括號在正則表達式中所做的。第零個元素是整個匹配,隨後的每個元素按照其引入的順序對應於「捕獲組」(即括號對)。

演示:

path.match(/(u)s((e)(r))/) 
    //result: ["user", "u", "er", "e", "r"] 
+0

所以 「U」 ,「呃」,「e」,「r」全部是「用戶」的子匹配。它是否正確?沒有副分配比賽,對吧? –

+0

不,子匹配或捕獲只是'()'中的東西。 – Amadan

1

由於您沒有在正則表達式中指定g,因此match函數的行爲與 regexp.exec(字符串)相同。並根據其文檔,exec方法的結果包含匹配的子字符串和捕獲括號。

請檢查下面的網址

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FRegExp%2Fexec