RegEx (в JavaScript найти / заменить) - сопоставить не буквенно-цифровые символы, но игнорировать - и + - PullRequest
11 голосов
/ 05 июля 2010

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

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

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

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

У кого-нибудь есть идеи, как этого добиться?

1 Ответ

16 голосов
/ 05 июля 2010

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

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

[^\w+-]+

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

Вы также можете сделать это с таким негативным взглядом, как это:

(?![+-])\W

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

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

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