let hd = `后盾人QQ群:11111111,99999999,88888888 后盾人不断分享视频教程,后盾人网址是houdunren.com`; let reg = /(\d+),?/y; reg.lastIndex=7; // console.log(reg.exec(hd)); let qq= []; while((res = reg.exec(hd))){ qq.push(res[1])}//res返回一个数组,res[1]数组的第二个属性为匹配到的值 console.log(qq);
原子表,按单一字符匹配
1 2 3
let tel = '2022/02/23' let reg= /^\d{4}([-\/])\d{2}\1\d{2}$/g; // \1表示要和前面的原子组(([-\/])保持一致 console.log(tel.match(reg));
!!!!!注意原子表中的字符不解析。例如()表示原子组,但是在原子表里面它就是普通括号
1 2 3 4
let hd = "(houdnren.com).+"; console.log(hd.match(/[()]/gi)); 输出结果: ["(", ")"]
let reg = /<(h[1-6])>([\s\S]+?)<\/\1>/ig; const body = document.querySelector('main'); let contents=[]; let hd= document.body.innerHTML.matchAll(reg); for (const iterator of hd) { console.dir(iterator); contents.push(iterator[2]) } console.table(contents);
为低端浏览器定义原型方法matchAll
1 2 3 4 5 6 7 8 9 10
String.prototype.matchAll=function(reg){ let res = this.match(reg); if(res){ let str = this.replace(res[0],"^".repeat(res[0].length)); let match = str.matchAll(reg) || [ ]; return [res, ...match]; } } let hd = 'houdunren.com'; console.log(hd.matchAll(/(u)/
JS 部分 <script > function searchs( string, reg){ let result=[]; while(res=reg.exec(string)){ result.push(res) } return result; } let matchs = searchs(document.body.innerHTML, /<(h[1-6])>([\s\S]+?)<\/\1>/ig); console.log(matchs); </script>
$&的使用
1 2 3 4 5 6 7 8 9
html部分 <main> 在线教育是一种高效的学习方式,教育是一生的事业 </main> JS部分 let main = document.querySelector('body main'); main.innerHTML=main.innerHTML.replace(/教育/g,"<a href=https://www.hdcms.com>$&</a>") //$&可以取到匹配到的值
原子组别名
1 2 3 4 5 6 7
let hd= ` <h1>houdunren</h1> <span>后盾人</span> <h2>hdcms</h2> ` let reg = /<(h[1-6])>(?<con>.*?)<\/\1>/ig; //?<con>取别名的地方 console.log(hd.replace(reg,"<h4>$<con></h4>")); //$<con>使用别名
零宽先行断言
1 2 3 4 5 6 7 8 9 10 11 12 13
html部分
<main> 后盾人不断分享视频教程,学习后盾人教程提升编程能力。 </main>
JS部分
let main = document.querySelector('main'); let reg = /后盾人(?=教程)/g; //表示后盾人后面是教程的 main.innerHTML= main.innerHTML.replace(reg,` <a href="https://houdunren.com">$&</a>`)