正则表达式命名捕获组
ES9以前,获取字符串中的某些值,需要这样做
let str = '<a href="http://www.baidu.com">百度</a>'
const reg = /<a href="(.*)">(.*)<\/a>/
let result = reg.exec(str)
console.log(result)
ES9允许命名捕获组使用符号?<name>
,这样获取捕获结果可读性更强
let str = '<a href="http://www.baidu.com">百度</a>'
let reg = /<a href="(?<url>.*)">(?<text>.*)<\/a>/
let result = reg.exec(str)
console.log(result)
console.log(result.groups.url)
console.log(result.groups.text)
正则表达式反向断言
ES9支持反向断言,使用?<=
对目标内容前面的内容进行判断,对匹配进行筛选
let str = 'JS1231234你好啊555哈哈哈'
// 取出555
// 正向断言,对目标内容后面的内容进行判断
// const reg = /\d+(?=哈)/
// const result = reg.exec(str)
// 反向断言
const reg = /(?<=啊)\d+/
const result = reg.exec(str)
正则表达式 dotAll 模式
正则表达式中.
匹配除回车外的任何单字符,标记s
会改变这种行为,允许行终止符出现
let str = `<ul>
<li>
<a>肖生克的救赎</a>
<p>上映日期:1994-09-10</p>
</li>
<li>
<a>阿甘正传</a>
<p>上映日期:1994-07-06</p>
</li>
</ul>`
// const reg = /<li>\s+<a>(.*?)<\/a>\s+<p>(.*?)<\/p>\s+<\/li>/g
const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/gs;
let result;
let data = []
while (result = reg.exec(str)) {
data.push({ title: result[1], time: result[2] })
}
console.log(data)