Регулярное выражение Javascript возвращает символ #, даже если оно не захвачено - PullRequest
1 голос
/ 17 февраля 2010
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 ]

1 голос
/ 17 февраля 2010

exec это несколько раз, чтобы получить остальное.

while((match = r.exec(text)))
  log(match);
1 голос
/ 17 февраля 2010

Используйте String.prototype.match вместо RegExp.prototype.exec:

var match = text.match(r);

Это даст вам все совпадения одновременно (требуется флаг g ) вместо одного совпадения за раз.

0 голосов
/ 17 февраля 2010

Вот еще один способ

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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...