Преобразовать строку в регулярное выражение, разбить его на шаблон и флаги и проверить регулярное выражение - PullRequest
0 голосов
/ 15 октября 2019

У меня есть вход, где я могу добавить регулярное выражение в виде строки. Например: ^ abc / igm

Мое требование:

  1. Мне нужно подтвердить ввод и проверить, является ли оно действительным регулярным выражением или нет.
  2. Мне нужно преобразовать действительное регулярное выражение в приемлемый формат mongodb, т.е.

{$regex: 'abc', $options: 'igm'}

Для 2-го пункта я использовал:

let options = val.replace(/.*\/([gimy]*)$/, '$1');для $ options и

let pattern = val.match(/.*\//); для $ regex.

Но есть несколько проблем, с которыми я сталкиваюсь:

  1. шаблонвозвращая значение как ^ abc / , и этот завершающий символ "/" недопустим в фильтре mongodb.

  2. Я могу проверить последнее вхождение "/" и удалитьэто в шаблоне, но что, если пользователь добавляет несколько «/» в шаблон, как ^ abc / cde ////// gm . Он по-прежнему недействителен для mongodb.

  3. Теперь, если я удалю все завершающие символы "/", все равно это недопустимое регулярное выражение ^ abc / cde .

  4. Теперь я снова могу проверить наличие всех "/" и удалить его, но что если пользователь напишет регулярное выражение, например ^ abc / cde / gm . Это правильное регулярное выражение, и по логике удаления «/» оно удалит «/», что станет другой проблемой.

Это становится слишком сложным. Будем весьма благодарны за любую помощь в проверке регулярного выражения и написании его в приемлемом формате mongodb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...