ES9正则拓展

Canaan_SS
2021-05-23 / 1 评论 / 366 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年05月23日,已超过23天没有更新,若内容或图片失效,请留言反馈。

正则命名捕获分组

// 利用正则取出href的值,和显示的文本
const str = '<a href="http://baidu.com">百度一下,你就凉了</a>'
const reg = /<a href="(.*)">(.*)<\/a>/
const res = reg.exec(str)
console.log(res)

正则命名捕获分组

上面的取值方法,需要通过索引值进行获取,如果正则发生变动,则索引会跟随发生改变,下面利用正则命名分组进行提取

正向断言 & 反向断言

// 通过正向断言取出数字555
const str = "我那么多遗憾,那么多期盼555你知道吗"
const reg = /\d+(?=你知道)/
const res = reg.exec(str)
console.log(res)

// 通过反向断言取出数字555
const str = "我那么多遗憾,那么多期盼555你知道吗"
const reg = /(?<=期盼)\d+/
const res = reg.exec(str)
console.log(res)

dotAll模式

在正则中,. 表示匹配除换行以外的任意字符,如果想让 . 也匹配换行,那么需要将正则改成dotAll模式,元字符为 s 。例如:

// 将电影名称和时间提取成数组
const str = `
    <ul>
        <li>
            <a>肖生克的救赎</a>
            <p>2021/05/22</p>
        </li>
        <li>
            <a>喜羊羊与灰太狼</a>
            <p>2021/05/23</p>
        </li>
    <ul>
`
// 加上s修饰符,.将会匹配换行
const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>.*?<\/li>/gs
let res = null;
let arr = []
while(res = reg.exec(str)) {
    arr.push({
        title: res[1],
        time: res[2]
    })
}
console.log(arr)

matchAll

// 将电影名称和时间提取成数组
const str = `
    <ul>
        <li>
            <a>肖生克的救赎</a>
            <p>2021/05/22</p>
        </li>
        <li>
            <a>喜羊羊与灰太狼</a>
            <p>2021/05/23</p>
        </li>
    <ul>
`
const reg =  /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>.*?<\/li>/gs
// 返回一个可迭代对象
const res = str.matchAll(reg)
console.log([...res])
0

评论 (1)

取消
  1. 头像
    北京艺术培训
    Windows 10 · FireFox

    感谢分享 赞一个

    回复
CDN Sponsor Google Analytics

bt冀ICP备16023298号-9