如何为所有语言创建字母数字正则表达式?

taw*_*kov 11 regex language-agnostic unicode non-english

我今天遇到这个问题:

这个正则表达式只匹配英语:[a-zA-Z0-9].

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

R. *_*des 9

如果您使用字符类缩写和Unicode感知的正则表达式引擎,您可以这样做.在\w类匹配"单词字符"(字母,数字和下划线).

请注意一些不能很好地执行此操作的正则表达式:JavaScript将ASCII用于\d(数字)\w,而Unicode则用于\s(空格).XML以相反的方式做到了.

  • \w 不支持国际字母,例如。冈瑟 (4认同)
  • 这在很大程度上取决于您使用的语言/正则表达式语法.`[[:alpha:]]`可能更标准. (2认同)

小智 7

字母/字母:\p{L}

数字:\p{N}

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

我一直在寻找一种方法,用 JS 中的空格替换所有语言的所有非字母字符,最终使用以下方法来实现:

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

这里因为它是 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