Ответ 1
Классы символов не чередуются, следовательно, |
является литералом, а ^
должен быть в начале действия класса (в противном случае он обрабатывается буквально.)
Используйте это:
[^\w+-]+
(Кроме того, если -
не является последним, он должен быть экранирован как \-
внутри символьного класса, поэтому будьте осторожны, если в список исключений добавится больше символов).
Вы также можете сделать это с помощью негативного вида:
(?![+-])\W
Примечание: после этого \W
вы не хотите *
или +
, так как lookahead применяется только к следующему символу (и флаг g
выполняет повтор замены до завершения).
Также обратите внимание, что \W
и \W
рассматривают _
как символ слова. Если это не желательно, замените это, вы можете использовать (?![+-])[\W_]
(или использовать явные диапазоны в первых выражениях).