RegEx (в JavaScript находят/заменяют) - соответствуют неалфавитно-цифровым символам, но игнорируют - и +

Мы использовали следующий js/regex для нахождения и заменения всех неалфавитно-цифровых символов кроме - и +

outputString = outputString.replace(/[^\w|^\+|^-]*/g, "");

Однако это не работает полностью - это не заменяет ^ и | символы. Я не могу не задаться вопросом - ли это что-то, чтобы сделать с ^ и | используемый в качестве метасимволов в самом regex.

Я попытался переключиться на использование [\W|^+|^-], но это заменяет - и +. Я думал, что возможно предварительное утверждение может быть ответом, но я не очень уверен, как реализовать их.

Кто-либо понял, как выполнить это?

11
задан Phil Baines 5 July 2010 в 08:23
поделиться

1 ответ

Классы символов не делают чередования, поэтому | является буквальным, а ^ должен быть в начале класса, чтобы вступить в силу (иначе он воспринимается буквально. )

Используйте это:

[^\w+-]+

(Также, если - не последние, их нужно экранировать как \- внутри класса символов - так что будьте осторожны, если в список исключений могут быть добавлены дополнительные символы).

Вы также можете сделать это с отрицательной задержкой, например, так:

(?![+-])\W

Примечание: Вам не нужны * или + после \W, поскольку задержка применяется только к непосредственно следующему символу (а флаг g заставляет замену повторяться до тех пор, пока не будет сделано).

Также обратите внимание, что \w и \W рассматривают _ как символ слова. Если это нежелательно, то для замены можно использовать (?![+-])[\W_] (или использовать явные диапазоны в первых выражениях).

16
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: