RegEx(在JavaScript中查找/替换) - 匹配非字母数字字符但忽略 - 和+

Phi*_*nes 11 javascript regex alphanumeric non-alphanumeric

我们一直在使用以下js/regex来查找和替换除 - 和+之外的所有非字母数字字符

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

但它并不完全有效 - 它不会取代^和| 字符.我不禁想知道这是否与^和|有关 在正则表达式本身中用作元字符.

我尝试过切换使用[\W|^+|^-],但是它取代了 - 和+.我认为可能是一个先行断言可能是答案,但我不太确定如何实现它们.

有没有人知道如何实现这一目标?

Pet*_*ton 16

字符类不做交替,因此为什么|是字面值,并且^必须在类的开头才能生效(否则它按字面处理.)

用这个:

[^\w+-]+
Run Code Online (Sandbox Code Playgroud)

(另外,如果-不是最后一个,则需要\-在字符类中进行转义- 因此如果可能会将更多字符添加到例外列表中,请小心).

您也可以使用这样的负向前瞻:

(?![+-])\W
Run Code Online (Sandbox Code Playgroud)

注意:您不需要a *+之后\W,因为前瞻仅适用于紧随其后的字符(并且该g标志使替换重复直到完成).

还要注意\w\W考虑_作为单词字符.如果不需要那么替换你可以使用(?![+-])[\W_](或在第一个表达式中使用显式范围).