0

我有这个正则表达式

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

所以基本上捕获 $m.[+ 任意数量的字母数字或 . 直到另一个字符或结尾]

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

var match = mregexp.exec(mstring);

match 有 0: "$mx" 1: "$mx" // 不是我预期的 $my。

我究竟做错了什么?

谢谢

4

3 回答 3

3

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

您可以将函数传递给.replace(),我个人喜欢:

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

这将向您显示两个匹配的组。(该函数传递的参数与从 中返回的数组的元素具有相同的性质.exec()。)

于 2012-07-31T23:20:51.783 回答
0

您将不得不重复mregexp.exec(),直到它返回null

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

有关 Javascript 的正则表达式,请参见http://www.regular-expressions.info/javascript.html

于 2012-07-31T23:24:07.633 回答
0

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

于 2012-07-31T23:24:09.007 回答