Создание динамического соответствия регулярному выражению в JavaScript

1

Есть ли способ определить новый шаблон символа регулярного выражения в 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/ соответственно и т.д. И т.д.

  • 2
    «Я пытаюсь избежать этого» Почему? Что в этом плохого?
  • 0
    @MichałPerłakowski MichałPerłakowski это грязно. У меня есть код, растягивающий несколько файлов, и для этого мне нужно передать свое «сообщение» в качестве аргумента в каждую функцию, которая везде использует регулярные выражения. Вдобавок ко всему, я пишу модуль узла, так что все приложения, которые используют мой модуль, также должны были бы это сделать. Было бы проще, если бы каждый мог полагаться на тот факт, что {message} просто (волшебным образом) интерпретировалось как означающее определенное значение.
Показать ещё 6 комментариев
Теги:
ecmascript-6

1 ответ

0

Нет, это невозможно. Лучшее, что вы можете сделать, это создать функцию, которая примет строку, заменит {message}, создаст объект RegExp и вернет его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню