Ответ 1
Чтобы совпадать несколько раз, используйте по необходимости глобальную опцию
str.match(/your_expression_here/g)
^
Если у меня есть строка HTML, например:
<div><p>£20<span class="abc" /><span class="def">56</span></p></div>
И я хочу текст:
20<span class="abc" /><span class="def">56
Как определить регулярное выражение для соответствия разделам цели несколько раз. До сих пор я:
str.match(/\d*<[^>]*>\d*/)
Но это вернет только первый номер раздела 20<span class="abc" />
Мне нужно, чтобы это было гибким, чтобы сопоставлять несколько разделов тегов/чисел при обрезке чего-либо, ведущего или завершающего первую/последнюю цифру в строке.
Чтобы совпадать несколько раз, используйте по необходимости глобальную опцию
str.match(/your_expression_here/g)
^
Добавление /g
недостаточно, если вы хотите сопоставить несколько вхождений подстроки. В этом случае квантификаторы с неохотным регистром могут быть использованы, как описано здесь.
Учитывая строку:
<div><p>£20<span class="abc" /><span class="def">56</span></p></div>
Вы получите текст, который вы хотели использовать:
\d+.*>\d+
Но с учетом того, что одна и та же строка повторяется два раза:
<div><p>£20<span class="abc" /><span class="def">56</span></p></div><div><p>£20<span class="abc" /><span class="def">56</span></p></div>
Вы не найдете целевой выбор несколько раз. Вы найдете его только один раз из-за жадного характера .*
. Чтобы сделать .*
нежадным или неохотным, просто добавьте ?
после *
, и вы получите:
\d+.*?>\d+
Который найдет оба вхождения запрашиваемой подстроки как , показанное здесь.
Просто позвольте группе повторять: (?:...)+
означает "Match ...
1 или более раз:
str.match(/\d+(?:<[^>]*>)+\d+/)
Согласно предложению Алана Мура, я также изменил \d*
на \d+
, сделав требуемые числа вместо необязательного.