Есть ли способ определить новый шаблон символа регулярного выражения в JavaScript с помощью NodeJS? Например, /hello\sworld/gm
в /{message}/gm
, где {message}
интерпретируется как "hello world" или любая другая строка, которую я решаю.
По сути, я стараюсь избегать этого:
var message = "hello world";
(new RegExp(message, "gm")).test(someString);
В надежде получить что-то вроде:
/{message}/gm.test(someString);
Я хотел бы отметить, что он не должен работать только для метода test
. Любой метод, который RegExp использует для сопоставления, тестирования, поиска и т.д., Должен работать. Я думаю, это можно было бы сделать, если есть способ переопределить функции? Или есть способ редактировать аргументы RegExp при создании объекта?
Идея состоит в том, чтобы я определил {message}
как нечто, что означало что-то, и для этого нужно интерпретировать глобально, не имея дело с конкатенацией переменной в каждый шаблон регулярного выражения.
Я знаю, что другие спрашивали о динамических регулярных выражениях раньше. Ответ на все это - использовать конструктор RegExp. Мне интересно, есть ли альтернатива, возможно, как переоценка ванильных JavaScript-классов.
Также обратите внимание, что я не спрашиваю, является ли это хорошей практикой. Я спрашиваю, возможно ли это с хорошей практикой или без нее.
Для ясности, {message}
следует заменить в каждом отдельном регулярном выражении, сделанном в любом файле. Итак /{message}/
and /bananas:\s{message}/
стать /hello\sworld/
and /bananas:\shello\sworld/
соответственно и т.д. И т.д.
Нет, это невозможно. Лучшее, что вы можете сделать, это создать функцию, которая примет строку, заменит {message}
, создаст объект RegExp
и вернет его.
{message}
просто (волшебным образом) интерпретировалось как означающее определенное значение.