JavaScript+Unicode正则表达式如何在JavaScript中使用Unicode感知的正则表达式?例如,应该有一些类似于\w的东西可以匹配字母或标记类别中的任何代码点(而不仅仅是ASCII),并且希望有类似[P*]之类的过滤器用于标点符号等。
4 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
由于没有找到一个好的解决方案,我写了一个小的剧本很久以前,从Unicode下载数据规格(v.5.0.0)并为BMP中的每个Unicode类别和子类别生成间隔(最近由一个小型Java程序它使用自己的本机Unicode支持)。
基本上它会转换\p{...}
值的范围,非常类似于工具Tomalak提到过,但是间隔可能很大(因为它不是处理块,而是处理分散在许多不同地方的字符)。
例如,这样编写的Regex:
var regex = unicode_hack(/\p{L}(\p{L}|\p{Nd})*/g);
将被转换成这样的东西:
/[\u0041-\u005a\u0061-\u007a...]([...]|[\u0030-\u0039\u0660-\u0669...])*/g
在实践中并没有经常使用它,但是从我的测试来看,它似乎运行得很好,所以我在这里发布,以防有人发现它有用。尽管结果正则表达式的长度(上面的示例在展开时有3591个字符),但性能似乎是可以接受的。
这是来源(生,27.5KB;缩小、24.9KB,不见得更好.)。它强权通过取消对Unicode字符的转义,可以使其变得更小,但是OTOH将面临编码问题的风险,所以我将按原样离开。希望ES6不再需要这样的东西了。
米脂
TA贡献1836条经验 获得超3个赞
正如其他答案中提到的,JavaScriptregexes不支持Unicode字符类。然而,有一个库确实提供了以下内容:StevenLevithan的优秀XRegExp及其Unicode插件.
添加回答
举报
0/150
提交
取消