12

我今天遇到了这个问题:

此正则表达式仅匹配英语:[a-zA-Z0-9].

如果我需要支持这个世界上的任何语言,我应该写什么正则表达式?

4

4 回答 4

9

如果您使用字符类速记和 Unicode 感知正则表达式引擎,您可以做到这一点。该类\w匹配“单词字符”(字母、数字和下划线)。

当心一些不能很好地做到这一点的正则表达式风格:JavaScript 使用 ASCII 表示\d(digits) 和\w,但 Unicode 表示\s(whitespace)。XML 则相反。

于 2011-07-14T11:40:16.040 回答
2

字母/字母:\p{L}

数字:\p{N}

因此,对于所有语言的字母数字匹配,您可以使用:[\p{L}\p{N}]+

我正在寻找一种方法来用 JS 中的空格替换所有语言的所有非字母字符,并最终使用以下方法来做到这一点:

const regexForNonAlphaNum = new RegExp(/[^\p{L}\p{N}]+/ug);
someText.replace(regexForNonAlphaNum, " ");

在这里,因为它是 JS,我们需要在末尾添加 u 以使正则表达式识别 unicode,g 代表全局,因为我想要匹配所有实例而不仅仅是单个实例。

参考:

https://www.linkedin.com/pulse/regex-one-pattern-rule-them-all-find-bring-darkness-bind-carranza/?trackingId=U6tRte%2BzTAG6O4AA3CrFmA%3D%3D

https://www.regular-expressions.info/unicode.html

于 2020-09-28T08:47:37.003 回答
0

支持大多数语言的正则表达式

^[A-zÀ-Ÿ\d-]*$

于 2021-01-07T05:43:23.583 回答
0

下面的正则表达式是唯一对我有用的:

"\\p{LD}+" ==> LD means any letter or digit. 

如果要从任何非字母数字字符中清除文本,可以使用以下命令:

text.replaceAll("\\P{LD}+", "");//Note P is capital. 
于 2021-08-31T21:28:01.640 回答