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