Chrome 正则表达式新特性

2017-07-28  本文已影响0人  dolby_xiaowen

Google V8团队提出并设计了几个新特性来使得JavaScript的正则表达式更为强大。这些特性当前(2017-7-28)处于Stage3的阶段。访问chrome://flags/#enable-javascript-harmony开启这些特性体验。

命名捕获

正则表达式有所谓的分组捕获,可以将捕获的内容分组,目前而言,开发者只能根据捕获组的序号获得这些捕获分组,这样带来的两个问题是,当分组嵌套或者分组数发生改变时,代码会变得难以处理。比如:

/(?:(.)(.(?<=[^(])(.)))/  //最后一个分组的序号是?

/(a)(b)(c)\3\2\1/  // 捕获abccba
/(.)(a)(b)(c)\4\3\2/   //当添加一个需求时,所有序号都需要改变

命令捕获,与Java等语言一样,可以让开发者对分组进行命名并引用。测试如下:


通过在分组中插入<groupname>标签,可以对捕获分组进行命名。可以用字符串的replace方法测试一下:

const pattern = /(?<fst>a)(?<snd>b)/;
'ab'.replace(pattern,'$<snd>$<fst>'); //'ba'
'ab',replace(pattern,(match,...groups, o, s,{fst, snd}) => fst + snd);

反向断言

与Perl等语言一致,JavaScript的反向断言语法如下:

/(?<=\$)\d+/.exec('$1 is worth about ¥123');  // ['1']
/(?<!\$)\d+/.exec('$1 is worth about ¥123');  // ['123']

References

Upcoming Regular Expression Features

上一篇下一篇

猜你喜欢

热点阅读