Большинство выражений здесь решают одно конкретные случаи использования.
Это нормально, но я предпочитаю подход «всегда работает».
function regExpEscape(literal_string) {
return literal_string.replace(/[-[\]{}()*+!<=:?.\/\\^$|#\s,]/g, '\\$&');
}
Это «полностью исчезнет», буквальная строка для любого из следующих применений в регулярных выражениях:
new RegExp(regExpEscape(str))
new RegExp('[' + regExpEscape(str) + ']')
new RegExp('x{1,' + regExpEscape(str) + '}')
Описанные специальные символы:
-
: создает диапазон символов в классе символов. [
/ ]
: Запускает / завершает класс символов. {
/ }
: Запускает / завершает спецификатор нумерации . (
/ )
: Запускает / завершает группу. *
/ +
/ ?
: Определяет тип повторения. .
: соответствует любому символу. \
: стирает символы и запускает объекты. ^
: указывает начало зоны соответствия и отменяет соответствие в символьный класс. $
: Задает конец зоны совпадения. |
: Определяет чередование. #
: указывает комментарий на свободном расстоянии \s
: Игнорируется в режиме свободного пробела. ,
: Разделяет значения в спецификаторе нумерации. /
: Запускает или завершает выражение. :
: Завершает специальные типы групп и часть классов символов в стиле Perl. [/ g 20] !
: Отклоняет группу нулевой ширины. <
/ =
: Часть спецификаций группы нулевой ширины. Примечания :
/
не является строго необходимым в любом вкусе регулярного выражения. Тем не менее, он защищает, если кто-то (содрогание) делает eval("/" + pattern + "/");
. ,
гарантирует, что если строка должна быть целым числом в числовом спецификаторе, она будет должным образом вызывают ошибку компиляции RegExp вместо того, чтобы молча выполнять компиляцию. #
и \s
не нужно бежать в JavaScript, но делать это во многих других вариантах. Они ускользнуты здесь, если регулярное выражение будет передано в другую программу. Если вам также необходимо будущее регулярное выражение против возможных дополнений к движку JavaScript regex возможности, я рекомендую использовать более параноид:
function regExpEscapeFuture(literal_string) {
return literal_string.replace(/[^A-Za-z0-9_]/g, '\\$&');
}
Эта функция пропускает каждый символ, за исключением тех, которые явно не используются для синтаксиса в будущих ароматах регулярных выражений.
Для по-настоящему здравомыслящий, рассмотрим этот краевой случай:
var s = '';
new RegExp('(choice1|choice2|' + regExpEscape(s) + ')');
Этот должен компилироваться в JavaScript, но не будет в некоторых других вариантах. Если намереваться передать другой вкус, нулевой случай s === ''
должен быть независимо проверен, например:
var s = '';
new RegExp('(choice1|choice2' + (s ? '|' + regExpEscape(s) : '') + ')');
Вам необходимо добавить каталог maven bin в PATH. Затем вы можете вызвать его из каталога проекта.