Ответ 1
Вы можете использовать match
с глобальным модификатором:
>>> '1 2 3 4'.match(/\d/g);
["1", "2", "3", "4"]
Есть ли эквивалент PHP preg_match_all в Javascript? Если нет, то какой лучший способ получить все соответствия регулярного выражения в массив? Я хочу использовать любую JS-библиотеку, чтобы упростить ее.
Вы можете использовать match
с глобальным модификатором:
>>> '1 2 3 4'.match(/\d/g);
["1", "2", "3", "4"]
Джон Ресиг написал о большой технике в своем блоге под названием "" Поиск и не заменяет"
Он работает с использованием функции замены javascript, которая выполняет функцию обратного вызова и ничего не возвращает, чтобы исходный контент не изменялся.
Это может быть более аккуратным, чем использование глобального соответствия и итерация по массиву результатов, особенно если вы собираете несколько групп.
Лучшим эквивалентом 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