资讯专栏INFORMATION COLUMN

JavaScript正则库:XRegExp

incredible / 3251人阅读

摘要:它的语法是被匹配字符串一个正则组成的数组,比如,,该方法返回与匹配链条正则数组最后一个正则的匹配内容,或一个空数组。

好像网上介绍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’修饰符,所以忽略空格且支持行注释
//忽略空格指的是正则中的空格被忽略
//(?…)这种写法即命名的捕获组
// #...为行注释
var date = XRegExp("(?  [0-9]{4} ) -?  # year  

                    (? [0-9]{2} ) -?  # month 

                    (?   [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,...]

该方法返回与匹配链条(正则数组)最后一个正则的匹配内容,或一个空数组。
例如:

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


// 返回命名的捕获组内容(后部引用)
html = "XRegExp
        Google";
XRegExp.matchChain(html, [
  {regex: //i, backref: 1},
  {regex: XRegExp("(?i)^https?://(?[^/?#]+)"), 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://www.ucloud.cn/yun/78298.html

相关文章

  • 正则与JS中的正则

    摘要:注意本文将正则与中的正则分开讨论。正则零宽断言更多参考各种语言对于正则不同支持参考单行模式与多行模式通过设置正则表达式后的修饰符可开启对应的匹配模式单行模式和多行模式。 最近这段时间帮同学处理一些文档, 涉及到一些结构化文档的工作大部分都得使用正则表达式, 之前对于正则的认识大多来源于语言书上那几页的介绍, 自己也没有用过几次。这里将我之前感到模糊的概念作个整理。因为对JS了解多点,所...

    firim 评论0 收藏0
  • 12个优秀资源助你迅速掌握正则表达式

    摘要:给开发人员使用的正则表达式测试仪。一个令人非常兴奋的项目,可以改变开发人员使用正则表达式的方式。它的目的是使正则表达式易于阅读和使用命令编写。实时的正则表达式测试工具,支持,,和。 正则表达式是每个程序开发人员的必备技能。任何开发项目,不管使用什么编程语言,都需要从给定的数据提取值并进行验证。例如对输入内容的验证,过滤 URL 变量等等,正则表达式处理这样的任务很容易,而且只需要很少的...

    zoomdong 评论0 收藏0
  • 扩展微信小程序框架功能

    摘要:扩展微信小程序框架功能是状态容器,提供可预测化的状态管理。扩展微信小程序框架功能日期时间是一个的日期时间处理工具类,其对于的日期时间处理功能非常强悍和全面。 通过第三方 JavaScript 库,扩展微信小程序框架功能。 扩展微信小程序框架功能(1)——Promise ES6 对 Promise 有了原生的支持,但微信开发者工具更新版本(0.11.112200)后, 移除了开发者工具...

    marek 评论0 收藏0
  • Top Javascript tools 2017

    摘要:原文地址地址基础工具编译类型检查代码分析引擎兼容性检查器单元测试单元测试断言库单元测试数据模拟测试代码格式化整洁性能测试可视化,静态分析,复杂性,覆盖工具优化混淆可共享可运行的代码编辑器在线正则表达式编辑器可视化工具创作公约工具可视 原文地址git地址 基础工具 accounting.js async axios chance date-fns format.js immutable...

    罗志环 评论0 收藏0
  • ECMAScript 6新特性印象之一:新语法

    摘要:下例实现了一个数组的迭代器在中,可迭代数据结构比如数组都必须实现一个名为的方法,该方法返回一个该结构元素的迭代器。原话是还可以传递返回值。 前记 按照规划,明年年中,ECMAScript 6(ES6)就要正式发布了。 最近抽空看了Dr. Axel Rauschmayer的几篇文章和演讲PPT,对新特性有了些了解。 趁没忘,抓紧记录下,夹杂自己的感受。 计划分三部分: 新语法...

    马忠志 评论0 收藏0

发表评论

0条评论

incredible

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<