Как запустить Maven из проекта

Большинство выражений здесь решают одно конкретные случаи использования.

Это нормально, но я предпочитаю подход «всегда работает».

function regExpEscape(literal_string) {
    return literal_string.replace(/[-[\]{}()*+!<=:?.\/\\^$|#\s,]/g, '\\$&');
}

Это «полностью исчезнет», буквальная строка для любого из следующих применений в регулярных выражениях:

  • Вставка в регулярном выражении. Например. new RegExp(regExpEscape(str))
  • Вставка в класс символов. Например. new RegExp('[' + regExpEscape(str) + ']')
  • Вставка в спецификаторе целых чисел. Например. new RegExp('x{1,' + regExpEscape(str) + '}')
  • Выполнение в двигателях с регулярными выражениями, отличными от JavaScript.

Описанные специальные символы:

  • -: создает диапазон символов в классе символов.
  • [ / ]: Запускает / завершает класс символов.
  • { / }: Запускает / завершает спецификатор нумерации .
  • ( / ): Запускает / завершает группу.
  • * / + / ?: Определяет тип повторения.
  • .: соответствует любому символу.
  • \: стирает символы и запускает объекты.
  • ^: указывает начало зоны соответствия и отменяет соответствие в символьный класс.
  • $: Задает конец зоны совпадения.
  • |: Определяет чередование.
  • #: указывает комментарий на свободном расстоянии
  • \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) : '') + ')');
0
задан LotPings 18 January 2019 в 12:29
поделиться