开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情
原子组的别名
有这么一个字符串,我想替换 掉里面的h1-h6的标签为h4,首先我整个正则,/<(h[1-6])>(.*)</\1>/g;首尾相应的标签才符合匹配规则,然后,分组2的是我要保留的内容,正常方法就是这样,使用$2表示第二个分组的值,
let shizebang= `
<h2>shizengbang</h2>
<span>大坏蛋</span>
<h1>shizebnag</h1>
`
const reg=/<(h[1-6])>(.*)<\/\1>/g;
const str=shizebang.replace(reg,'<h4>$2</h4>');
console.log(str)
把上面代码替换成下面这样 (?<别名>.*),然后在使用时可以$<别名>这么使用,效果是一模一样的
const reg=/<(h[1-6])>(?<content>.*)<\/\1>/g;
const str=shizebang.replace(reg,'<h4>$<content></h4>');
console.log(str)
别名的使用 有这个一个字符串,现在想呢,获取a链接的的href和这个a里面的内容,用正则获取正合适,然后可以使用(?.*?)给这个分组起别名叫link,另一个起别名叫title,然后的到迭代器对象,可以for of循环一下子,获取每个匹配的group,就可以了
let shizebang= `
<a href="http://www.saobang.com">骚帮</a>
<a id='shi' href="http://www.shitou.com">石头</a>
<a href="http://www.shizebang.com">是则帮</a>
`
const reg=/<a.*?href=(["'])(?<link>.*?)\1>(?<title>.*?)<\/a>/ig;
const arr=shizebang.matchAll(reg);
const links=[]
for(let i of arr){
links.push(i.groups)
}
console.log(links)
断言匹配
有这么一个字符串,实则棒能是坏人,然后想把实则棒这个变成一个超链接。但是呢,实则棒不是人这种就不想替换了,也就是我只想替换实则棒是xx的这种 此时可以使用断言
let shizebang= `实则棒是老诗人,实则棒是老实人,实则棒不是人`
const reg=/实则棒/g
console.log(shizebang.replace(reg,'<a href="http://wwww.shizebang.com">$&</a>'))
下面代码中,直接使用/实则棒(?=是)/g (?=xx)这种方式,就是断言后面是(是),只匹配实则棒是xx这种实则棒,其他的不匹配
let shizebang= `实则棒是老诗人,实则棒是老实人,实则棒不是人`
const reg=/实则棒(?=是)/g
console.log(shizebang.replace(reg,'<a href="http://wwww.shizebang.com">$&</a>'))