Вы должны быть осторожны, используя жадное сопоставление, когда у вас есть .*
. Обычно это не делает то, что вы хотите - это соответствует как можно большей части строки. Вам нужно либо использовать класс отрицательных символов, чтобы остановить сопоставление при достижении определенного символа (например, [^)]
), либо использовать lazy match .*?
. Вот как это можно сделать с помощью ленивого квантификатора:
s = '{theField} > YEAR (today, -3) || {theField} < YEAR (today, +3)';
result = s.replace(/((YEAR|MONTH|WEEK|DAY).*?\))/g, '" + $1 + "')
Результат:
{theField} > " + YEAR (today, -3) + " || {theField} < " + YEAR (today, +3) + "
Обратите внимание, что я немного вычистил ваше регулярное выражение:
- Удалено
+
из DAY+
, как заметил Кенни ТМ
- Изменено
[)]+
на \)
- Изменена литеральная строка замены с двойных кавычек, чтобы исключить кавычки в тексте замены
- Убрано лишнее пространство, которое вы помещаете в результат между ГОДОМ и следующей открывающей скобкой