我怎么能在任何地方做这个呢?
基本上,我试图匹配各种各样的杂字符,如符号,分号,美元符号等。
这个应该可以:
[^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:]*$
这招对我很管用... :)
没有字母数字,空白或’_’。
var reg = /[^\w\s)]|[_]/g;
如果你想对待重音拉丁字符(例如天)作为正常的字母(例如。避免匹配它们) ,您还需要在正则表达式中包含适当的 Unicode 范围(好的) ,因此它看起来应该是这样的:
/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
^
a-zA-Z
\d
\s
:
\u00C0-\u00FF
NB.Unicode 范围匹配可能不适用于所有的正则表达式引擎,但是上面的内容肯定适用于 Javascript (如 Codepen 上的 这支笔所示)。
如果你不介意匹配下划线,你可以用 \w代替 a-zA-Z\d,它匹配字母、数字和下划线。
\w
a-zA-Z\d
如果你指的是“非字母数字字符”,试着用这个:
var reg =/[^a-zA-Z0-9]/g //[^abc]
这个正则表达式适用于 C # 、 PCRE和 去吧。
根据 RegexBuddy的说法,它不适用于 Chrome 上的 JavaScript,但这里已经有了一个例子。
其中的主要部分是:
\p{L}
代表 \p{L}或者 \p{Letter}任何语言的字母
\p{Letter}
完整正则表达式本身: [^\w\d\s:\p{L}]
[^\w\d\s:\p{L}]
例如: https://regex101.com/r/K59PrA/2
在 JavaScript 中:
/[^\w_]/g
^否定,即在下面的集合中选择任何 没有
\w任何单词字符(即任何字母数字字符,加上下划线)
_否定下划线,因为它被认为是一个“单词”字符
_
使用示例 -const nonAlphaNumericChars = /[^\w_]/g;
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