我们一直在使用以下js / regex来查找和替换除 - 和+
之外的所有非字母数字字符outputString = outputString.replace(/[^\w|^\+|^-]*/g, "");
然而,它并不完全有效 - 它不会取代^和|字符。我不禁想知道这是否与^和|有关在正则表达式中用作元字符。
我尝试过切换使用[\W|^+|^-]
,但这取代了 - 和+。我认为可能是一个先行断言可能是答案,但我不太确定如何实现它们。
有没有人知道如何做到这一点?
答案 0 :(得分:16)
字符类不做交替,因此|
是文字的,^
必须在类的开头才能生效(否则它会被字面处理。)
使用此:
[^\w+-]+
(另外,如果-
不是最后一个,则需要在字符类中将其转义为\-
- 所以如果可能会在例外列表中添加更多字符,请小心。)
您也可以使用这样的负向前瞻:
(?![+-])\W
注意:您不希望在*
之后使用+
或\W
,因为前瞻仅适用于紧随其后的字符(并且g
标志使替换重复直到完成。)
另请注意,\w
和\W
会将_
视为单词字符。如果不需要,那么替换它可以使用(?![+-])[\W_]
(或在第一个表达式中使用显式范围)。