正则的扩展

基本用法

1
2
3
4
5
var regex = new RegExp("xyz", "i")
var regex = new RegExp(/xyz/i)
var regex = /xyz/i

new RegExp(/abc/gi, "i").flags //ig 被覆盖成 i

match()、replace()、search()、split()

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]

u 修饰符、i 修饰符、y 修饰符

ES6 对正则表达式添加了 u 修饰符,用来处理大于\uFFFF 的 Unicod 字符。
\u004B 与\u212A 都是 K,不加修饰就无法识别非规范的 K 字符。
y 修饰符与 g 修饰符类似,也是全局匹配,不同之处在于 g 修饰符只要剩余位置中存在匹配就行,而 y 修饰符会确保匹配必须从剩余的第一个位置开始。

1
2
3
4
5
6
7
8
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

sticky 属性

与 y 修饰符匹配,表示是否设置了 y 修饰符。

flags 属性

返回正则表达式的修饰符。

组匹配

1
2
3
4
5
const RE_DATE = /(\d{4})-(\d{2})-(\d{2})/
const matchObj = RE_DATE.exec("2018-03-01")
const year = matchObj[1] //2018
const month = matchObj[2] //03
const day = matchObj[3] //01