JavaScript正则匹配 多行内容

需求: 通过正则匹配给定代码块中的链接和标题

刚开始是通过以下正则匹配的, 尝试之后匹配失败
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)

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值