Unicode字符类转义:\p{…},\p{…{
试试看
语法
\p{loneProperty} \P{loneProperty} \p{属性=值} \P{属性=值}
参数
描述
. The
示例
一般类别
//查找文本中的所有字母 const story=“这是柴郡猫:现在我要找个人谈谈。”; //最明确的形式 story.match(/\p{General_Category=Letter}/gu); //对于常规类别,不强制使用属性名称 story.match(/\p{Letter}/gu); //这是等效的(短别名): 故事匹配(/\p{L}/gu); //这也是等效的(使用短别名连接所有子类别) 故事匹配(/\p{Lu}|\p{Ll}|\p{Lt}|\p2{Lm}|\p-{Lo}/gu);
脚本和脚本扩展
const mixedCharacters=“εЛ”; //使用脚本的规范“长”名称 mixedCharacters.match(/\p{Script=Latin}/u);// 一 //为脚本使用短别名(ISO 15924代码) mixedCharacters.match(/\p{Script=Grek}/u);// ε //对Script属性使用短名称sc mixedCharacters.match(/\p{sc=Cyrillic}/u);// Л
//٢是阿拉伯-印度符号中的数字2 //而它主要是用阿拉伯语书写的 //它也可以用塔纳文字书写 “٢”.match(/\p{Script=Thana}/u); //空,因为塔纳不是主要的剧本 “٢”.match(/\p{Script_Extensions=Thana}/u); //[“٢”,索引:0,输入:“\1634]”,组:未定义]
Unicode属性转义与字符类
//尝试使用范围来避免限制: const non-EnglishText=“ПрикааненирАЛистраоеаебуДес”; const regexpBMPWord=/([\u0000-\u0019\u0021-\uFFFF])+/gu; //BMP经过U+0000到U+FFFF,但空格是U+0020 console.table(非英语文本匹配(regexpBMPWord)); //改为使用Unicode属性转义 const regexpUPE=/\p{L}+/gu; console.table(非英语文本匹配(regexpUPE));
匹配的价格
函数getPrices(str){ //Sc代表“货币符号” return[…str.matchAll(/\p{Sc}\s*[\d.,]+/gu)].map((match)=>match[0]); } const str=`California滚动6.99美元 松脆卷8.49美元 天妇罗虾$10.99`; console.log(getPrices(str));// ["$6.99", "$8.49", "$10.99"] const str2=`美国商店19.99美元 欧洲商店18.99欧元 日本商店2000元人民币; console.log(getPrices(str2));// ["$19.99", "€18.99", "¥2000"]
匹配字符串
const标志=“ 🇺🇳 "; console.log(flag.length);// 2 控制台.log(/\p{RGI_Emoji_Flag_Sequence}/v.exec(标志));// [ ' 🇺🇳' ]
/\P{RGI_Emoji_Flag_Sequence}/v;// 语法错误:正则表达式无效:属性名无效
规格
浏览器兼容性
另请参见
字符类 指导 正则表达式 字符类别: [...] , [^...] 字符类转义: \d日 , \D类 , \w个 , \W公司 , \秒 , \S公司 字符转义: \n个 , \u{…} 分离: | Unicode字符属性 在维基百科上 ES2018:RegExp Unicode属性转义 作者:Axel Rauschmayer博士(2017) Unicode正则表达式§属性 Unicode实用程序:UnicodeSet 带有设置符号和字符串属性的RegExp v标志 在v8.dev上(2022)