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