4.正则的扩展

回到目录

字符串的正则方法

字符串对象共有 4 个方法,可以使用正则表达式:match()、replace()、search()和 split()。

ES6 将这 4 个方法,在语言内部全部调用 RegExp 的实例方法,从而做到所有与正则相关的方法,全都定义在 RegExp 对象上。

  • String.prototype.match 调用 RegExp.prototype[Symbol.match]
  • String.prototype.replace 调用 RegExp.prototype[Symbol.replace]
  • String.prototype.search 调用 RegExp.prototype[Symbol.search]
  • String.prototype.split 调用 RegExp.prototype[Symbol.split]

不过对于使用者来说,基本没有什么变化

正则的修饰符

type 作用
i 表示忽略大小写,默认区分大小写
g 表示匹配所有的,默认是匹配到第一个就停下
u 含义为“Unicode 模式”,用来正确处理大于\uFFFF 的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。
y 也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始
s dotAll 修饰符(点修饰符),开启一种模式,这种模式下 . 可以用来表示任意字符
特别的
y 修饰符的作用与 g 修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g 修饰符只要剩余位置中存在匹配就可,而 y 修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。
var s = "aaa_aa_a";
var r1 = /a+/g;
var r2 = /a+/y;

r1.exec(s); // ["aaa"]
r2.exec(s); // ["aaa"]

r1.exec(s); // ["aa"]
r2.exec(s); // null

上面代码有两个正则表达式,一个使用 g 修饰符,另一个使用 y 修饰符。这两个正则表达式各执行了两次,第一次执行的时候,两者行为相同,剩余字符串都是_aa_a。由于 g 修饰没有位置要求,所以第二次执行会返回结果,而 y 修饰符要求匹配必须从头部开始,所以返回 null。

通俗的说就是, g 只要后面的字符还有能满足正则的一段就会表示匹配,然后 y 就要求必须从上一个满足的下一个字符开始的字符必须满足正则才会显示匹配

RegExp.prototype 的属性

属性 作用
unicode 表示是否设置了 u 修饰符
sticky 表示是否设置了 y 修饰符。
flags 会返回正则表达式的修饰符。
source 会返回正则表达式的表达式。

断言

type 形式 作用 版本
先行断言 /x(?=y)/ x 只有在 y 前面才匹配
先行否定断言 /x(?!y)/ x 只有不在 y 前面才匹配
后行断言 /(?<=y)x/ x 只有在 y 后面才匹配 2018
后行否定断言 /x(?<!y)/ x 只有不在 y 后面才匹配 2018

-----------------未完待续--------------
回到目录

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容