2012-07-31 71 views
0

我有此正則表達式試圖捕捉在javascript正則表達式組(端口從C#)

var mregex = /(\$m[\w|\.]+)/g; 
string mstring= "$m.x = $m.y"; 

所以基本上捕獲$米。[+任何數量的字母數字的或每個實例。直到另一個字符或結束]

我在C#中工作,但我試圖將它移植到JavaScript,因此刪除了名稱捕獲。

var match = mregexp.exec(mstring); 

比賽有 0: 「$ m.x」 1: 「$ m.x」 //不m.y $因爲我本來期望。

我在做什麼錯了?

感謝

+1

看看exec如何工作,以及如何通過https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec – elclanrs 2012-07-31 23:22:25

回答

3

你的正則表達式匹配只是一次。返回數組的[0]元素是整個匹配的子字符串。 [1]元素是第一個組,在你的情況是相同的。您必須再次致電.exec()才能找到第二個實例。

你可以通過一個函數來.replace(),這是我個人非常喜歡:

mstring.replace(mregexp, function(_, group) { 
    console.log(group); 
}); 

那會告訴你這兩個匹配組。 (該函數傳遞是同一性質的從.exec()返回數組的元素參數。)

+0

獲得與全局標誌的多重匹配。這是有道理的,就在我看到帶有兩個元素的返回對象時,我們假設它們是結果。謝謝你的回答。 – sambomartin 2012-07-31 23:26:33

0

您可以撥打mstring.match(mregexp)返回所有的比賽,但你只看到匹配的字符串(在這種情況下,你可以簡化mregexp/\$m[\w.]+/g)。