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


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

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

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

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

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


4665
2017-07-05 08:23


起源



答案:


字符类不做交替,因此为什么 | 是文字的,而且是 ^ 必须在课程的开始才能生效(否则它会被字面上对待。)

用这个:

[^\w+-]+

(另外,如果 - 不是最后一次,它需要被转义为 \- 在字符类中 - 如果可以将更多字符添加到例外列表中,请小心。

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

(?![+-])\W

注意:你不需要 * 要么 + 之后 \W,因为前瞻只适用于紧随其后的角色(和 g flag使替换重复直到完成)。

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


16
2017-07-05 08:27



嗨,彼得,谢谢 - 这很棒。 <code> [^ \ w + - ] + </ code>工作得很好!感谢您提供更多信息 - 非常有帮助。 - Phil Baines


答案:


字符类不做交替,因此为什么 | 是文字的,而且是 ^ 必须在课程的开始才能生效(否则它会被字面上对待。)

用这个:

[^\w+-]+

(另外,如果 - 不是最后一次,它需要被转义为 \- 在字符类中 - 如果可以将更多字符添加到例外列表中,请小心。

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

(?![+-])\W

注意:你不需要 * 要么 + 之后 \W,因为前瞻只适用于紧随其后的角色(和 g flag使替换重复直到完成)。

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


16
2017-07-05 08:27



嗨,彼得,谢谢 - 这很棒。 <code> [^ \ w + - ] + </ code>工作得很好!感谢您提供更多信息 - 非常有帮助。 - Phil Baines