2012-07-31 65 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)。