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不遵守捕获规则。
答案 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"]