preg_match_all JS эквивалентно? - PullRequest
15 голосов
/ 12 июня 2009

Есть ли эквивалент PHP preg_match_all в Javascript? Если нет, что было бы лучшим способом получить все совпадения регулярного выражения в массиве? Я хочу использовать любую библиотеку JS, чтобы сделать это проще.

Ответы [ 3 ]

26 голосов
/ 12 июня 2009

Вы можете использовать match с глобальным модификатором:

>>> '1 2 3 4'.match(/\d/g);
["1", "2", "3", "4"]
10 голосов
/ 12 июня 2009

Джон Ресиг написал в своем блоге о замечательной технике под названием ' Поиск и не заменяй '

Он работает с использованием функции замены в javascript, которая принимает функцию обратного вызова и ничего не возвращает, чтобы оставить исходное содержимое без изменений.

Это может быть лучше, чем использование глобального сопоставления и итерация по массиву результатов, особенно если вы захватываете несколько групп.

1 голос
/ 27 мая 2016

Лучшим эквивалентом preg_match_all из PHP в JS было бы использование функции exec (). Это также позволит вам захватывать группы, с помощью match () вы не сможете этого сделать.

Например, вы хотите захватить все время и число в скобках из переменной myString:

var myString = "10:30 am (15 left)11:00 am (15 left)11:30 am";
var pattern = /(\d{1,2}:\d{1,2}\s?[ap]m)\s\((\d+)/gi;
var match;
while (match = pattern.exec(myString)){
  console.log('Match: "' + match[0] + '" first group: -> "' + match[1] + '" second group -> ' + match[2]);
}

Вывод будет:

Match: "10:30 am (15" first group: -> "10:30 am" second group -> 15
Match: "11:00 am (15" first group: -> "11:00 am" second group -> 15
...