Нежадные (ungreedy) регулярные выражения в Javascript
Привет.
Как вы, наверное, знаете, джаваскрипт не поддерживает никакие другие модификаторы шаблонов регулярных выражений, кроме «g» (глобальная подстановка), «i» (игнорировать регистр символов) и «m» (многострочная подстановка). В частности, нет такого полезного модификатора, как «Ungreedy». Но, как оказалось, его можно включить, но немного по-другому.
Например у нас есть задача: заменить все {$var}
в строке Some variable here: {$var} and there: {$var}
на <a>var</a>
.
Если мы попробуем использовать регулярное выражение /{\$(.*)}/g
, то получим следующее:
Some variable here: <a>var} and there: {$var</a>
, что явно нам не подходит.
Это произошло потому, что по-умолчанию в JS регулярные выражения «жадные» — т.е. пытаются взять максимально подходящее
под шаблон количество символов. В нашем случае под шаблон подошла вся строка от первого {$
до последнего }
.
Нам же нужно другое поведение.
Для этого используем хитрое сочетание специальных символов(подсмотренное в MDN), и наш шаблон обретает следующий
вид: /{\$(.+?)}/g
. Теперь при замене мы получаем именно то, что нам требуется
Some variable here: <a>var</a> and there: <a>var</a>
.
Удачи!