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

时间:2012-11-03 14:46:25

标签: javascript regex

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

     /[a-zA-Z]+/

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

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

我尝试了什么:

  a.match(/[p{l}]+/)
  a.match(/[\p{l}]+/)
  a.match(/p{l}/)
  a.match(/\p{l}/)

但是所有字母a =“aB”

都返回null

3 个答案:

答案 0 :(得分:13)

从ECMAScript 2018开始,JavaScript最终本身支持Unicode property escapes

对于旧版本,您需要自己定义所有相关的Unicode范围。或者您可以使用Steven Levithan的XRegExp package with Unicode add-ons并使用其Unicode属性快捷方式:

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

答案 1 :(得分:6)

如果您愿意使用Babel构建您的javascript,那么我发布了一个babel-plugin,它会将/^\p{L}+$//\p{^White_Space}/之类的正则表达式转换为浏览器的正则表达式会明白。

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

答案 2 :(得分:0)

您可以将\p{L}与现代ECMAScript 2018+ compliant JavaScript environments结合使用,但是要记住,只有在传递u修饰符/标志时,才支持Unicode属性类:

a.match(/\p{L}+/gu)
a.match(/\p{Alphabetic}+/gu)

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

注意\p{Alphabetic}\p{Alpha})包括与\p{L}匹配的所有字母,以及与{{1 }}(例如\p{Nl} –罗马数字的字符),以及与12\p{Other_Alphabetic})匹配的其他一些符号。

\p{OAlpha}修饰符与正则表达式结合使用时,有一些注意事项:

  • 您可以使用诸如u之类的Unicode代码点转义序列通过代码点指定字符。普通的Unicode转义字符,例如\u{1F42A}仅具有四个十六进制数字范围(等于基本的多语言平面)(source
  • 4个字节的字符正确处理:作为一个字符,而不是两个2字节字符”(source
  • 对使用\u03B1标志编译的模式的转义要求更为严格:您不能转义任何特殊字符,只能转义实际上可以表现为特殊字符的字符。参见HTML input pattern not working