字符串的正则方法
字符串对象共有 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 |
-----------------未完待续--------------
回到目录