【问题标题】:Regex, every non-alphanumeric character except white space or colon正则表达式,除空格或冒号外的所有非字母数字字符
【发布时间】:2011-08-28 13:17:47
【问题描述】:

我怎样才能在任何地方做到这一点?

基本上,我正在尝试匹配各种杂项字符,例如&符号、分号、美元符号等。

【问题讨论】:

  • /[^a-zA-Z0-9\s\:]*/

标签: regex


【解决方案1】:

在 JavaScript 中:

/[^\w_]/g

^ 否定,即选择以下集合中的任何内容

\w任何单词字符(即任何字母数字字符,加上下划线)

_ 否定下划线,因为它被视为“单词”字符

使用示例 - const nonAlphaNumericChars = /[^\w_]/g;

【讨论】:

  • [^\w_][^\w] 相同(因为_ 是一个字字符),它等于\W
【解决方案2】:

此正则表达式适用于 C#PCREGo 等等。

正如RegexBuddy 所说,它不适用于 Chrome 上的 JavaScript。但是这里已经有一个例子了。

这主要的部分是:

\p{L}

代表\p{L}\p{Letter} 来自任何语言的任何类型的字母。`


完整的正则表达式本身: [^\w\d\s:\p{L}]

示例: https://regex101.com/r/K59PrA/2

【讨论】:

  • 这是这里唯一以正确方式正确处理 Unicode 重音字母的答案。遗憾的是,并非所有正则表达式引擎都支持此功能(即使 Python 3.8 也缺少它,尽管它的正则表达式引擎表面上是基于 PCRE 的)。
  • 我将从答案中删除 Python,我以为我已经测试过了,但显然没有。感谢您指出这一点。
【解决方案3】:

如果您的意思是“非字母数字字符”,请尝试使用:

var reg =/[^a-zA-Z0-9]/g      //[^abc]

【讨论】:

    【解决方案4】:

    尝试添加这个:

    ^[^a-zA-Z\d\s:]*$
    

    这对我有用... :)

    【讨论】:

    • 这似乎重复了 2011 年接受的答案。^$ 锚将其限制为匹配整行,* 量词意味着它也匹配空行。
    【解决方案5】:

    试试这个:

    [^a-zA-Z0-9 :]
    

    JavaScript 示例:

    "!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")
    

    查看在线示例:

    http://jsfiddle.net/vhMy8/

    【讨论】:

    • 投反对票,因为这不会捕获非拉丁字符,也不会捕获“特殊”拉丁字符。
    • 对答案投反对票很容易,但向董事会提供建设性信息却更加困难,例如那么如何捕捉非拉丁字符,也不是“特殊”拉丁字符?根据我的计数,您出于同样的原因对 3 个答案投了反对票,并且在我看来,这是一个相当小的调整。例如,我在这里为这些答案中讨论的内容找到一个正则表达式。我不关心不会在我的应用程序中使用的字符集。收益递减规律。
    • Aaron 对美国公民来说可能是一个“小调整”,但对这个星球的其他人来说却是高度相关的。
    • [^a-zA-Z0-9 :] 可以替换为[^\w:]
    • \w 也包含下划线,所以请留意
    【解决方案6】:

    应该这样做:

    [^a-zA-Z\d\s:]
    

    【讨论】:

    • 其余的要么检查空格但不检查空格,要么在错误的位置进行否定以实际否定。
    • \w 也捕获下划线 - 这是一个非字母数字字符
    • 啊哈!我要修改——我不知道。我希望它对不同引擎的工作方式不同,但不妨给 OP 一个安全的答案。
    • 投反对票,因为这不会捕获非拉丁字符,也不会捕获“特殊”拉丁字符。
    【解决方案7】:

    如果您想将带重音的拉丁字符(例如 à Ñ)视为普通字母(即避免也匹配它们),您还需要在您的正则表达式中包含适当的 Unicode 范围 (\u00C0-\u00FF),所以它看起来像这样:

    /[^a-zA-Z\d\s:\u00C0-\u00FF]/g
    
    • ^ 否定接下来的内容
    • a-zA-Z 匹配大小写字母
    • \d 匹配数字
    • \s 匹配空格(如果你只想匹配空格,用空格替换)
    • : 匹配冒号
    • \u00C0-\u00FF 匹配带重音的拉丁字符的 Unicode 范围。

    注意。 Unicode 范围匹配可能不适用于所有正则表达式引擎,但上述内容肯定适用于 Javascript(如 Codepen 上的 this pen 所示)。

    nb2。如果您不介意匹配下划线,可以将a-zA-Z\d 替换为\w,它匹配字母、数字和下划线。

    【讨论】:

    • 此范围包含一些非字母数字字符(U+00D7 和 U+00F7),并且不包括波兰语、捷克语、越南语等非西方语言中的许多有效重音字符。跨度>
    • 赞成 RegEx 各部分的描述。
    【解决方案8】:

    没有字母数字、空格或“_”。

    var reg = /[^\w\s)]|[_]/g;
    

    【讨论】:

      【解决方案9】:
      [^a-zA-Z\d\s:]
      
      • \d - 数值类
      • \s - 空格
      • a-zA-Z - 匹配所有字母
      • ^ - 全部否定 - 所以你得到 - 非数字字符、非空格和非冒号

      【讨论】:

      • 这也是我在看的:)) - 我必须宣传你的完美答案
      • 我发现的唯一一件事是这会删除像 é 或 ã 这样的特殊字符。我更喜欢 [^\w\d\s:]。
      • 投反对票,因为这不会捕获非拉丁字符,也不会捕获“特殊”拉丁字符。
      • \d\s 是 Perl 扩展,它们通常不受 grepsedtrlex 等旧工具的支持。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 2013-01-06
      • 2016-04-03
      相关资源
      最近更新 更多