Preg_match_all JS эквивалент?

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

Ответы

Ответ 1

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

>>> '1 2 3 4'.match(/\d/g);
["1", "2", "3", "4"]

Ответ 2

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

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

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

Ответ 3

Лучшим эквивалентом 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