正则表达式,除空格或冒号外的所有非字母数字字符

我怎么能在任何地方做这个呢?

基本上,我试图匹配各种各样的杂字符,如符号,分号,美元符号等。

286959 次浏览

这个应该可以:

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

试试这个:

[^a-zA-Z0-9 :]

JavaScript 例子:

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

看看网上的例子:

http://jsfiddle.net/vhMy8/

[^a-zA-Z\d\s:]
  • D-数字类
  • 空格
  • A-zA-Z 匹配所有字母
  • ^-否定它们所有-所以你得到-非数字字符,非空格和非冒号

试着加上这个:

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

这招对我很管用... :)

没有字母数字,空白或’_’。

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

如果你想对待重音拉丁字符(例如天)作为正常的字母(例如。避免匹配它们) ,您还需要在正则表达式中包含适当的 Unicode 范围(好的) ,因此它看起来应该是这样的:

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

NB.Unicode 范围匹配可能不适用于所有的正则表达式引擎,但是上面的内容肯定适用于 Javascript (如 Codepen 上的 这支笔所示)。

如果你不介意匹配下划线,你可以用 \w代替 a-zA-Z\d,它匹配字母、数字和下划线。

如果你指的是“非字母数字字符”,试着用这个:

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

这个正则表达式适用于 C # PCRE去吧

根据 RegexBuddy的说法,它不适用于 Chrome 上的 JavaScript,但这里已经有了一个例子。

其中的主要部分是:

\p{L}

代表 \p{L}或者 \p{Letter}任何语言的字母


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

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

在 JavaScript 中:

/[^\w_]/g

^否定,即在下面的集合中选择任何 没有

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

_否定下划线,因为它被认为是一个“单词”字符

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

[ ^ w s-]

不符合以下条件的字符集:

  • 字母数字
  • 空格
  • 结肠

以前的解决方案似乎只适用于英语或其他没有重音的拉丁语言。出于这个原因,这些答案并不能概括地回答这个问题。

根据维基百科上的 空白字符文章,这些都是 Unicode 中的空格字符:

U + 0009,U + 000 A,U + 000 B,U + 000 C,U + 000 D,U + 0020,U + 0085,U + 00 A0,U + 1680,U + 180 E,U + 2000,U + 2001,U + 2002,U + 2003,U + 2004,U + 2005,u + 2006,U + 2007,U + 2008,U + 2009,U + 200 A,U + 200 B,U + 200 C,U + 200 D,U + 2028,U + 2029,U + 202 F,U + 205 F,U + 2060,U + 3000,U + FEFF

因此,在我看来,最具包容性的解决方案应该是(可能会很慢,但这是关于准确性的) :

\u0009\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B\u200C\u200D\u2028\u2029\u202F\u205F\u2060\u3000\uFEFF

因此,为了回答 OP 的问题,包括“除了空白或冒号之外的每一个非字母数字字符”,在 没有包含上述字符的前面加上一个帽子 ^,然后加上冒号,并在 []中将 regex 包围起来,以指示它包含“这些字符中的任何一个”:

"[^:\u0009\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B\u200C\u200D\u2028\u2029\u202F\u205F\u2060\u3000\uFEFF]"

调试器演示


奖励: R 的解决方案

trimws2 <- function(..., whitespace = "[\u0009\u000A\u000B\u000C\u000D\u0020\u0085\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B\u200C\u200D\u2028\u2029\u202F\u205F\u2060\u3000\uFEFF]") {
trimws(..., whitespace = whitespace)
}

这甚至比设置“ t n r”的 trimws ()本身还要快。

microbenchmark::microbenchmark(trimws2(" \t\r\n"), trimws(" \t\r\n"))
#> Unit: microseconds
#>                   expr    min     lq     mean  median      uq     max neval cld
#>  trimws2(" \\t\\r\\n") 29.177 29.875 31.94345 30.4990 31.3895 105.642   100  a
#>   trimws(" \\t\\r\\n") 45.811 46.630 48.25076 47.2545 48.2765 116.571   100   b