Javascript正则表达式返回#字符,即使它没有被捕获

时间:2010-02-17 19:20:59

标签: javascript regex

text = 'ticket number #1234 and #8976 ';
r = /#(\d+)/g;

var match = r.exec(text);

log(match); // ["#1234", "1234"]

在上述情况下,我想捕获1234和8976.我该怎么做。句子也可以有任意数量的'#'后跟整数。所以解决方案不应该硬编码,假设最多会出现两次。

更新: 只是好奇 。检查以下两种情况。

var match = r.exec(text); // ["#1234", "1234"]

var match = text.match(r);  //["#1234", "#8976"]

为什么在第二种情况下我会得到#,即使我没有抓住它。看起来像string.match不遵守捕获规则。

3 个答案:

答案 0 :(得分:1)

使用String.prototype.match代替RegExp.prototype.exec

var match = text.match(r);

这将立即为您提供所有比赛(需要 g 标志),而不是一次一场比赛。

答案 1 :(得分:1)

exec多次完成剩下的工作。

while((match = r.exec(text)))
  log(match);

答案 2 :(得分:0)

这是另一种方式

var text = 'ticket number #1234 and #8976 ';
var r = /#(\d+)/g;

var matches = [];
text.replace( r, function( all, first ) {
    matches.push( first )
});

log(matches);

//  ["1234", "8976"]