Именно то, что спрашивает название. Я приведу несколько примеров, объясняя свой вопрос.
Тестовая строка:
var test = "#foo# #foo# bar #foo#";
Скажем, я хочу извлечь весь текст между #
(все foo
, но не bar
).
var matches = test.match(/#(.*?)#/g);
Используя .match
, как указано выше, он сохранит все совпадения, но он просто выбросит группы захвата, которые, как кажется.
var matches2 = /#(.*?)#/g.exec(test);
Метод .exec
, по-видимому, возвращает только строку с результатом первого результата в позиции 0
массива и мою единственную группу захвата этого совпадения в позиции 1
.
Я исчерпал SO, Google и MDN, ища ответ безрезультатно.
Итак, мой вопрос заключается в том, есть ли лучший способ сохранить только согласованные группы захвата, чем прокручивать его с помощью .exec
и вызывать array.push
для хранения захваченных групп?
Мой ожидаемый массив для теста выше должен быть:
[0] => (string) foo
[1] => (string) foo
[2] => (string) foo
Pure JS и ответы jQuery принимаются, дополнительные файлы cookie, если вы отправляете JSFiddle с помощью console.log
. =]