Нежадные (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>.
Удачи!