需求: 通过正则匹配给定代码块中的链接和标题
刚开始是通过以下正则匹配的, 尝试之后匹配失败
let reg = /<a href="(.*?)" class="">.<span class="title">(.*?)<\/span><\/a>/igs
观察后发现是由于代码之间的换行引起的, 虽然修正模式加上了s, 但是还是需要在每次换行的位置加上.*?
进行匹配, 使用一下正则就可以匹配成功
let reg = /<a href="(.*?)" class="">.*?<span class="title">(.*?)<\/span>.*?<\/a>/igs
// 需要匹配的字符串
let str = `
<div>
<a href="链接1" class="">
<span class="title">名称1</span>
</a>
<a href="链接2" class="">
<span class="title">名称2</span>
</a>
<a href="链接3" class="">
<span class="title">名称3</span>
</a>
</div>
`
/**
* 正则分析
* 第一个(.*?) 匹配 电影链接
* 第一个.*? 匹配代码换行之间可能产生的空格
* 第二个(.*?) 匹配 电影标题
* 第二个.*? 匹配代码换行之间可能产生的空格
* igs i:不区分大小写 g:全局匹配 s:将字符串视为单行
*/
let reg = /<a href="(.*?)" class="">.*?<span class="title">(.*?)<\/span>.*?<\/a>/igs
let res
// 保存信息的数组
let movieArr = []
// 循环匹配
while (res = reg.exec(str)) {
let obj = {
name: res[2],
url: res[1]
}
movieArr.push(obj)
}
console.log(movieArr)