JavaScript正则库:XRegExp

彷佛网上引见JS正则库的文章不多,能够也是因为庞杂的正则婚配很少须要在客户端运转,所以JS上用的不多,而且我搜JS的正则库还真没找到第二个,囧。但它的一些特征挺有用,有兴致的同砚能够看看。因为没花太多时刻去揣摩,所以本文只将该库作扼要引见,本文用例悉数来自它的API文档。

XRegExp是一个为JS的正则表达式供应扩大功用的库, 挪用以后能够填补原生JS在正则方面的一些不足,也在很大程度上增强了JS正则的功用。它处置惩罚了浏览器之间正则的兼容问题,且支撑原生ES6正则语法(有关ES6中正则的新特征:参考?New regular expression features in ECMAScript 6)

XRegExp的压缩版也许4.25K,在性能上,因为XRegExp天生的正则都是原生的正则对象,其表现跟原生正则一样, 只是在初次建立XRegExp正则的时刻须要多点开支。它的重要特点以下:

XRegExp的重要特征

  • 扩大的正则语法,包含支撑定名的捕捉组以及更壮大的文本替代

  • 增添修饰符(flags)s支撑单行形式;x疏忽空格以及行解释;n明白捕捉组形式;A支撑21位Unicode婚配

  • 供应一套函数简化正则处置惩罚

  • 处置惩罚跨浏览器的正则兼容问题

  • 在此基础上供应扩大(addons)支撑更多的正则语法和功用

基础用法

XRegExp的最重要的API也就是这个组织函数XRegExp(pattern, [flags]) 其语法以下:

  • pattern参数为字符型的正则表达式

  • [flags]为可选的正则修饰符,固然也是字符型,它支撑原生的修饰符以及XRegExp中的扩大修饰符(特征中已列出)

返回值为被扩大的正则对象。

比方:

// 运用了‘x’修饰符,所以疏忽空格且支撑行解释
//疏忽空格指的是正则中的空格被疏忽
//(?<name>…)这类写法即定名的捕捉组
// #...为行解释
var date = XRegExp('(?<year>  [0-9]{4} ) -?  # year  \n\
                    (?<month> [0-9]{2} ) -?  # month \n\
                    (?<day>   [0-9]{2} )     # day   ', 'x');

//这里运用了XRegExp扩大的exec()要领
var match = XRegExp.exec('2015-02-22', date);
match.year; // -> '2015'

以上这个栗子?就表现了XRegExp在正则上壮大的扩大功用,比方定名的捕捉组,正则解释等,这从肯定程度上填补了原生JS正则上的不足。

风趣的特征

因为我并没有看完它的一切API文档, 也是刚打仗这玩意,所以这里只挑几个我以为比较有用的特征枚举。

迭代器forEach

它的语法花样为XRegExp.forEach(str, regex, callback)

  • str 被婚配的字符串

  • regex 传入的正则

  • 回调函数,该要领每次迭代将传入回调函数4个参数

    • 当前婚配的数组,而且带定名的后向援用属性

    • 当前婚配的索引位置

    • 正在被遍历的字符串

    • 正在运用的正则对象

该要领遍历被婚配的字符串,疏忽个中正则全局修饰符g,也疏忽lastIndex的初始值。
该要领无返回值。
比方:

// 从被婚配的字符串中每次抽取一个数字放入偶数数组
var evens = [];
XRegExp.forEach('1a2345', /\d/, function (match, i) {
  if (i % 2) evens.push(+match[0]);
});
// evens -> [2, 4]

婚配链要领matchChain

婚配链要领能够从之前的婚配效果中挪用下一个正则继承婚配,就像从一个大范围中运用差别的正则不停筛选出你要的数据。
它的语法是XRegExp.matchChain(str, chain)

  • str 被婚配字符串

  • 一个正则构成的数组,比方[reg1,reg2,…]

该要领返回与婚配链条(正则数组)末了一个正则的婚配内容,或一个空数组。
比方:

// 基础用法:抽取每一个<b>标记包裹的数字
//(?is)是XRegExp中修饰符前置的语法,它等同于在正则后加修饰符i s
XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [
  XRegExp('(?is)<b>.*?</b>'),
  /\d+/
]);
// -> ['2', '4', '56']


// 返回定名的捕捉组内容(后部援用)
html = '<a href="http://xregexp.com/api/">XRegExp</a>\
        <a href="http://www.google.com/">Google</a>';
XRegExp.matchChain(html, [
  {regex: /<a href="([^"]+)">/i, backref: 1},
  {regex: XRegExp('(?i)^https?://(?<domain>[^/?#]+)'), backref: 'domain'}
]);
// -> ['xregexp.com', 'www.google.com']

正则兼并要领union

该要领能够将须要婚配的字符串或许正则表达式兼并为一个正则表达式,带后部援用的正则在兼并时将被从新编码,其语法花样为XRegExp.union(patterns, [flags])

  • patterns为一个数组,数组元素能够是要婚配的字符串或正则

  • 可选的修饰符flags

返回值为兼并后的正则表达式。
比方:

XRegExp.union(['a+b*c', /(dogs)\1/, /(cats)\1/], 'i');
// -> /a\+b\*c|(dogs)\1|(cats)\2/i

大抵先写这么多,另有什么运用21位unicode婚配脸色符也蛮好玩的,再看到什么更好玩的继承补上吧。
以上内容重要照样大抵翻译API原文加上我本身的一些明白,这篇引见都很简单,看着能够有点不太清晰,若有什么讹夺还请指出。检察更细致的材料或许下载直接去它的主页吧。
XRegExp的主页:?XRegExp Github :?XRegExp 3.0.0

    原文作者:囧囧
    原文地址: https://segmentfault.com/a/1190000004141584
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞