Есть два блока, идущих друг за другом:
[BLOCK]12345[/BLOCK][BLOCK]543]21[/BLOCK]
Как мне регулярным выражением вытащить их по-очереди, чтобы перебрать в цикле? Такой вариант не работает, ищется весь текст целиком:
/(\[BLOCK\].+\[\/BLOCK\])+?/mi
Метод .exec
при использовании флага g
сохраняет позицию найденного совпадения в объекте регулярного выражения и при следующем запуске начинает с нее, а не с начала строки.
Так же стоит поправить само выражение добавив ?
после +
- это позволит остановиться при первом появлении [/BLOCK]
, а так же, если нужен текст внутри то стоит группировать именно его, без самих тегов, в итоге регулярное выражение может принять вид:
/\[BLOCK\](.+?)\[\/BLOCK\]/mig
Результатом .exec
является массив, в котором нулевой элемент - совпавшая подстрока, а последующие элементы соответствуют группировкам.
В случае, если совпадение не найдено будет возвращен null
Пример:
var str = '[BLOCK]12345[/BLOCK][BLOCK]543]21[/BLOCK]';
var reg = /\[BLOCK\](.+?)\[\/BLOCK\]/mig;
for (var res = reg.exec(str); res; res = reg.exec(str)) {
console.log(`match: '${res[0]}', text: '${res[1]}'`);
}
Ленивый режим работы квантификаторов – противоположность жадному, он означает «повторять минимальное количество раз».
Его можно включить, если поставить знак вопроса '?' после квантификатора, так что он станет таким: *? или +? или даже ?? для '?'.
Чтобы не возникло путаницы – важно понимать: обычно ? сам является квантификатором (ноль или один). Но если он стоит после другого квантификатора (или даже после себя), то обретает другой смысл – в этом случае он меняет режим его работы на ленивый.
https://learn.javascript.ru/regexp-greedy-and-lazy
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть html-страница, сохраненная из браузераНа ней используется collapse(аккордеон)
В репозитории responsive-components есть файл indexhtml, в котором с помощью конструкций:
На странице вывода статей может появляться следующий код, с классом redirectTextКак автоматически на php выполнить редирект на ссылку, если она...