Javascript正则表达式相当于/ [a-zA-Z] + /使用p {L}

use*_*962 16 javascript regex

我有以下正则表达式,只允许使用字母:

     /[a-zA-Z]+/

     a = "abcDF"
     if (a.match(/[a-zA-Z]+/) == a){
        //Match
     }else{
        //No Match
     } 
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用p {L}(通用 - 任何语言,如德语,英语等...)

我尝试了什么:

  a.match(/[p{l}]+/)
  a.match(/[\p{l}]+/)
  a.match(/p{l}/)
  a.match(/\p{l}/)
Run Code Online (Sandbox Code Playgroud)

但是所有字母a ="aB"都返回null

Tim*_*ker 14

从ECMAScript 2018开始,JavaScript最终本身支持Unicode属性转义.

对于旧版本,您需要自己定义所有相关的Unicode范围.或者您可以使用XRegExp带有Unicode附加组件的 Steven Levithan 软件包并利用其Unicode属性快捷方式:

var regex = new XRegExp("^\\p{L}*$")
var a = "abcäöüéèê"
if (regex.test(a)) {
    // Match
} else {
    // No Match
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 6

如果你愿意使用Babel来构建你的javascript,那么我发布了一个babel-plugin,它会将正则表达式转换为正常表达式,/^\p{L}+$/或者/\p{^White_Space}/转换成浏览器会理解的正则表达式.

这是项目页面:https://github.com/danielberndt/babel-plugin-utf-8-regex


Wik*_*żew 5

您可以\\p{L}与现代 ECMAScript 2018+兼容的 JavaScript 环境一起使用,但您需要记住,仅当您传递修饰符/标志时才支持 Unicode 属性类u

\n
a.match(/\\p{L}+/gu)\na.match(/\\p{Alphabetic}+/gu)\n
Run Code Online (Sandbox Code Playgroud)\n

将匹配字符串中所有出现的 1 个或多个 Unicode 字母a

\n

请注意\\p{Alphabetic}( \\p{Alpha}) 包括与 匹配的所有字母\\p{L},加上与匹配的字母数字\\p{Nl}(例如\xe2\x85\xab\xe2\x80\x93 罗马数字的字符),以及与( )12匹配的一些其他符号。\\p{Other_Alphabetic}\\p{OAlpha}

\n

u在将修饰符与正则表达式一起使用时,需要记住一些事项:

\n
    \n
  • 您可以使用 Unicode 代码点转义序列,例如\\u{1F42A}通过代码点指定字符。正常的 Unicode 转义,例如\\u03B1只有四个十六进制数字的范围(等于基本的多语言平面)(来源
  • \n
  • 4 个字节的字符被正确处理:作为单个字符,而不是两个 2 字节字符”(来源
  • \n
  • 对使用标志编译的模式的转义要求u更加严格:您不能转义任何特殊字符,只能转义那些实际上可以充当特殊字符的字符。请参阅HTML 输入模式不起作用
  • \n
\n