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

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

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

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

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

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

【问题讨论】:

    标签: javascript regex alphanumeric non-alphanumeric


    【解决方案1】:

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

    使用这个:

    [^\w+-]+
    

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

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

    (?![+-])\W
    

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

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

    【讨论】:

    • 嗨,彼得,谢谢 - 太好了。 [^\w+-]+ 工作得很好!感谢您提供更多信息 - 非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多