试图在javascript正则表达式中捕获组(来自c#的端口)

时间:2012-07-31 23:12:48

标签: javascript regex

我有这个正则表达式

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

所以基本上捕获每个$ m的实例。[+任意数量的字母或数字。直到另一个角色或结束]

我在C#中工作但是我试图将其移植到javascript,所以删除了名称捕获。

var match = mregexp.exec(mstring);

匹配了     0:" $ m.x"     1:" $ m.x" //不是我想象中的$ m.y。

我做错了什么?

感谢

3 个答案:

答案 0 :(得分:3)

你的正则表达只匹配一次。返回数组的[0]元素是整个匹配的子字符串。 [1]元素是第一个组,在您的情况下是相同的。您必须再次致电.exec()才能找到第二个实例。

您可以将功能传递给我个人喜欢的.replace()

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

这会向你展示两个匹配的群体。 (该函数传递的参数与.exec()返回数组的元素具有相同的性质。)

答案 1 :(得分:0)

您必须重复mregexp.exec(),直到它返回null

var match = []; //initialize a new array
while(mregexp.exec(mstring)){
    match.push(mregexp[1]);
}

对于Javascript的regexen风格,请参阅http://www.regular-expressions.info/javascript.html

答案 2 :(得分:0)

您可以致电mstring.match(mregexp)返回所有匹配项,但只能看到匹配的子字符串(在这种情况下,您可以将mregexp简化为/\$m[\w.]+/g)。