Основной вопрос: Должны ли экранированные обратные косые черты также храниться в базе данных для Javascript и насколько хорошо это будет работать с механизмом регулярных выражений PHP?
Подробности
У меня есть несколько шаблонов регулярных выражений, которые можно использовать для классификации строк по различным категориям. Пример приведен ниже:
(^A)|(\(A)
Это может распознать, например, « A » в начале строки или если он находится сразу после открытия скобка (
, но не если это где-то еще в строке.
DB C ( A B C) AA
A B C (DB C) AA
Мой проект использует эти шаблоны регулярных выражений на двух языках PHP и Javascript.
Я хочу сохранить эти шаблоны в базе данных MySQL, и, поскольку нет типа данных для регулярного выражения, я подумал, что могу сохранить его как VARCHAR
или TEXT
.
Проблема возникает, если я напрямую использую строки в Javascript, \(
считается только как (
, поскольку \
backsla sh используется как escape-символ. если это используется для создания new RegExp
, это дает ошибку:
Uncaught SyntaxError: незавершенная скобка
Например:
let regexstring = "(^A)|(\(A)";
console.log(regexstring); // outputs => "(^A)|((A)"
let regex = new RegExp(regexstring); // Gives Uncaught SyntaxError: unterminated parenthetical
На основе на этот ответ в StackOverflow, решение состоит в том, чтобы избежать обратных косых черт, например:
let regexstring = "(^A)|(\\(A)";
console.log(regexstring); // Outputs => "(^A)|(\\(A)"
regex = new RegExp(regexstring);
Таким образом, вопрос состоит в том, что экранированные обратные косые черты также должны храниться в базе данных и насколько хорошо это будет работать с движком регулярных выражений PHP?