ES11中matchAll

逻辑浮尘
• 阅读 838

小编今天和大家继续研究es11,今天的这个方法主要是针对字符串匹配上,之前匹配字符串的时候,更多的是使用正则表达式,就像这样。

const str = `
    <html>
        <body>
            <div>第一个div</div>
            <p>这是个p</p>
            <div>第二个div</div>
            <span>这是个span</span>
        </body>
    </html>
`
// 正则表达式中的exec g
function selectDiv(regExp,str){
    let matches = []
    while(true){
        const match = regExp.exec(str)
        if(match  == null){
            break;
        }
        matches.push(match) // 如果只想匹配匹配内容,可以写成matches.push(match[1])
    }
    return matches
}
const regExp  = /<div>(.*)<\/div>/g    // 如果不写g。会陷入死循环,因为每一次从开头开始匹配,不能break
const res = selectDiv(regExp,str)
console.log(res) // [["<div>第一个div</div>","第一个div"],["<div>第二个div</div>","第二个div"]]

上面是通过正则表达式中的exec匹配出html字符串中的div中的内容,针对这个需求,同样可以字符串方法match实现,就像这样。但是通过match,只能够匹配出与正则匹配的字符串,而不能匹配出div中间的内容。

const str = `
    <html>
        <body>
            <div>第一个div</div>
            <p>这是个p</p>
            <div>第二个div</div>
            <span>这是个span</span>
        </body>
    </html>
    `
const regExp  = /<div>(.*)<\/div>/g
console.log(str.match(regExp) // ["<div>第一个div</div>","<div>第二个div</div>"]

同样,我们也可以通过replace方法实现,之前使用replace方法,只是用于字符串替换,就像这样

let str1 = "aabbcc"
const res = str1.replace(/a/g,b) // bbbbcc

今天我们来了解这个方法的高级用法,也就是第二个参数传递是个函数,就像这样

function selectDiv(regExp,str){
    let matches= []
    str.replace(regExp,(all,first) => {
        matches.push(first)
    }) // 之前用一个要替换的字符串 
    return matches
}
const str = `
    <html>
        <body>
            <div>第一个div</div>
            <p>这是个p</p>
            <div>第二个div</div>
            <span>这是个span</span>
        </body>
    </html>
    `
const regExp  = /<div>(.*)<\/div>/g
const res  = selectDiv(regExp,str)
console.log(res) // ["第一个div","第二个div"]

现在,让我们请出今天的主角,matchAll,实例就像这样

function selectDiv(regExp,str){
    let matches= []
    for(let match of str.matchAll(regExp)){
        matches.push(match)
    }
    return matches
}
const str = `
    <html>
        <body>
            <div>第一个div</div>
            <p>这是个p</p>
            <div>第二个div</div>
            <span>这是个span</span>
        </body>
    </html>
    `
const regExp  = /<div>(.*)<\/div>/g // 如果正则表达式的时候,不写/g,matchAll方法会报错
const res  = selectDiv(regExp,str)
console.log(res) // [["<div>第一个div</div>","第一个div"],["<div>第二个div</div>","第二个div"]]

大家还可以扫描二维码,关注我的微信公众号,蜗牛全栈
ES11中matchAll

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Wesley13 Wesley13
3年前
ES6学习笔记(3)
参考书《ECMAScript6入门》http://es6.ruanyifeng.com/字符串的扩展ES6之前只能识别\\u0000\\uFFFF之间的字符,超过此范围,识别会出错;ES6弥补了这个错误ES6扩展的新方法codePointAt"𠮷".CodePointAt(0)//返回超过\\u00
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
JavaScript常用函数
1\.字符串长度截取functioncutstr(str,len){vartemp,icount0,patrn/^\x00\xff/,strre"";for(vari
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究