Не удается подставить переменную в регулярку

const str = 'ssss ssss ssss tmp tmp'
const vl = 'tmp'
console.log(str.replace(/tmp$/i, 'новая строка'))

Как подставить переменную 'vl' В данную регулярку?


Ответы (2 шт):

Автор решения: ksa

Как подставить переменную vl В данную регулярку?

Если в значении переменной нет "управляющих символов" - то довольно просто.

const str = 'ssss ssss ssss tmp tmp'
const vl = 'tmp'
const re = new RegExp(vl + '$', 'i')
console.log(str.replace(re, 'новая строка'))

→ Ссылка
Автор решения: Stanislav Volodarskiy

Если в переменной vl окажется какой-нибудь метасимвол, то замена сломается. Вам понадобится функция escapeRegExp что "экранировать" метасимволы, то есть заставить их вести себя как обычные символы.

NB Метасимволы перечислены в регулярном выражении внутри escapeRegExp.

Регулярное выражение /tmp$/i надо заменить на new RegExp(escapeRegExp(vl) + '$', 'i'). Так можно собрать текст образца из строк.

const escapeRegExp = re => re.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');

const str = 'ssss ssss ssss tmp tmp';
const vl = 'tmp';
console.log(str.replace(new RegExp(escapeRegExp(vl) + '$', 'i'), 'новая строка'))
→ Ссылка