JavaScript+Unicode正则表达式

JavaScript+Unicode正则表达式

如何在JavaScript中使用Unicode感知的正则表达式?例如,应该有一些类似于\w的东西可以匹配字母或标记类别中的任何代码点(而不仅仅是ASCII),并且希望有类似[P*]之类的过滤器用于标点符号等。



开心每一天1111
浏览 892回答 4
4回答

喵喔喔

由于没有找到一个好的解决方案,我写了一个小的剧本很久以前,从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不再需要这样的东西了。

米脂

正如其他答案中提到的,JavaScriptregexes不支持Unicode字符类。然而,有一个库确实提供了以下内容:StevenLevithan的优秀XRegExp及其Unicode插件.
打开App,查看更多内容
随时随地看视频慕课网APP