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

Posted

技术标签:

【中文标题】RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +【英文标题】:RegEx (in JavaScript find/replace) - match non-alphanumeric characters but ignore - and + 【发布时间】:2011-03-11 19:36:43 【问题描述】:

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

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

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

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

有没有人知道如何做到这一点?

【问题讨论】:

【参考方案1】:

字符类不做交替,因此| 是字面的,^ 必须在类的开头才能生效(否则它会按字面处理。)

使用这个:

[^\w+-]+

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

您也可以像这样使用负前瞻来做到这一点:

(?![+-])\W

注意:您不希望在\W 之后出现*+,因为前瞻仅适用于紧随其后的字符(并且g 标志使替换重复直到完成)。

还要注意\w\W_ 视为单词字符。如果不希望这样做,则可以使用 (?![+-])[\W_] 替换它(或在第一个表达式中使用显式范围)。

【讨论】:

嗨,彼得,谢谢 - 太好了。 [^\w+-]+ 工作得很好!感谢您提供更多信息 - 非常有帮助。

以上是关于RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +的主要内容,如果未能解决你的问题,请参考以下文章

RegEx - 在引号之间查找文本并在括号之间替换

PHP Regex preg_replace 函数仅查找和替换 3 个匹配项中的第一个和最后一个,而不是中间一个

JavaScript RegEx:在两个“标记”之间替换字符串中的文本

查找并替换Textmate的regex多行

Javascript REGEX 在字符串和掩码中查找信用卡号

查找和替换字符串的一部分