我有这个正则表达式
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。
我做错了什么?
感谢
答案 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
)。