课程名称:JavaScript ES(6-11)全版本语法 每个前端都需要的基础课
课程讲师: 谢成
课程内容:
9-1 全局模式捕获:String.prototype.matchAll()
课程收获:
matchAll() 方法返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器。正则表达式对象。如果所传参数不是一个正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp。RegExp必须是设置了全局模式g的形式,否则会抛出异常TypeError。一个迭代器(不可重用,结果耗尽需要再次调用方法,获取一个新的迭代器)。
const str = `
<html>
<body>
<div>第一个div</div>
<p>这是p</p>
<div>第二个div</div>
<span>这是span</span>
<div>第三个div</div>
</body>
</html>
`
// exec g
// function selectDiv(regExp, str){
// let matches = []
// while(true){
// // console.log(regExp.lastIndex)
// const match = regExp.exec(str)
// // console.log(match)
// if(match == null){
// break
// }
// matches.push(match[1])
// }
// return matches
// }
const regExp = /<div>(.*)<\/div>/g
// const res = selectDiv(regExp, str)
// console.log(res)
// match
// console.log(str.match(regExp))
// replace
// function selectDiv(regExp, str){
// let matches = []
// str.replace(regExp, (all, first) => {
// matches.push(first)
// })
// return matches
// }
// const res = selectDiv(regExp, str)
// console.log(res)
// matchAll
function selectDiv(regExp, str){
let matches = []
for(let match of str.matchAll(regExp)){
matches.push(match[1])
}
return matches
}
const res = selectDiv(regExp, str)
console.log(res)
谢谢老师,讲的非常细致,很容易懂。这一节学的是全局模式捕获:String.prototype.matchAll(),给以后的学习打下了基础。
原来ES6-11能有这么多种性质,以及对ES6-11有了新的认识,期待后边的学习