RegEx (в JavaScript find/replace) - соответствует не буквенно-цифровым символам, но игнорирует - и +

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

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

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

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

Кто-нибудь понял, как это сделать?

Ответ 1

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

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

[^\w+-]+

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

Вы также можете сделать это с помощью негативного вида:

(?![+-])\W

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

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