Не удается подставить переменную в регулярку
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'), 'новая строка'))