为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript+Unicode正则表达式

JavaScript+Unicode正则表达式

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不再需要这样的东西了。


查看完整回答
反对 回复 2019-05-30
?
米脂

TA贡献1836条经验 获得超3个赞

正如其他答案中提到的,JavaScriptregexes不支持Unicode字符类。然而,有一个库确实提供了以下内容:StevenLevithan的优秀XRegExp及其Unicode插件.


查看完整回答
反对 回复 2019-05-30
  • 4 回答
  • 0 关注
  • 884 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信