吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 922|回复: 8
收起左侧

[求助] JS,正则表达式match方法,遇到空格返回异常的问题

[复制链接]
cqwcns 发表于 2023-1-27 08:29
JS中,富文本生成一段html代码。
以下正则表达式,我希望匹配出第一个h1元素中的内容(即提取文章标题)。
当文章标题包含空格( )时,匹配结果就变得异常,见以下代码几次测试结果。

[JavaScript] 纯文本查看 复制代码
  const str1 = '<h1>这是标题</h1><p>正文内容</p><h1>第一点</h1><p>一些内容</p><h1>第二点</h1><p>一些内容</p><p>其他内容</p>',
    str2 = '<h1> 这是 标题 </h1><p>正文内容</p><h1>第一点</h1><p>一些内容</p><h1>第二点</h1><p>一些内容</p><p>其他内容</p>',
    str3 = '<h1>这是 标题 </h1><p>正文内容</p>';

  console.log(str1.match(/<h1>(\S+?)<\/h1>/))  // 匹配到“这是标题”
  console.log(str2.match(/<h1>(\S+?)<\/h1>/))  // 匹配到“第一点”
  console.log(str3.match(/<h1>(\S+?)<\/h1>/))  // 结果为null


所以,这种需求,正则应该怎么写?才能准确提取第一个h1的内容。请各位大佬指教,感谢。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaoluoke4399 发表于 2023-1-27 08:40
不太清楚要怎么弄
开心的一逼 发表于 2023-1-27 08:55
hollsovan 发表于 2023-1-27 09:15
[JavaScript] 纯文本查看 复制代码
    const str1 = '<h1>这是标题</h1><p>正文内容</p><h1>第一点</h1><p>一些内容</p><h1>第二点</h1><p>一些内容</p><p>其他内容</p>',
        str2 = '<h1> 这是 标题 </h1><p>正文内容</p><h1>第一点</h1><p>一些内容</p><h1>第二点</h1><p>一些内容</p><p>其他内容</p>',
        str3 = '<h1>这是 标题 </h1><p>正文内容</p>';

    // ?.防止因为匹配结果不存在而报错
    // trim()去除首尾空格
    let reg = /(?<=<h1>).*?(?=<)/;
    console.log(str1.match(reg)?.[0].trim());
    console.log(str2.match(reg)?.[0].trim());
    console.log(str3.match(reg)?.[0].trim());

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

冥界3大法王 发表于 2023-1-27 09:24
@cqwcns
要么多次处理
要么用前后断言位置匹配

感觉此次第1种方案更务实

免费评分

参与人数 1吾爱币 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

笨笨家的唯一 发表于 2023-1-27 09:44
本帖最后由 笨笨家的唯一 于 2023-1-27 09:49 编辑

参考4楼采用断言处理或者试试【let reg = /h1>(.*?)<\/h1/ig】;
然后就是【console.log(str1.match(reg)?.[0].trim())】;得到结果后就可以处理了。
你写的主要问题在于【\S】只会匹配 【非空白符,不包括换行】,所以中间有空格就会结果异常

免费评分

参与人数 1热心值 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

ccclbj 发表于 2023-1-27 10:42
学习了,感谢分享
os51 发表于 2023-1-27 11:29
var p = new DOMParser()
p.parseFromString(str1, 'text/html').querySelector('h1').innerText
p.parseFromString(str2, 'text/html').querySelector('h1').innerText
p.parseFromString(str3, 'text/html').querySelector('h1').innerText

免费评分

参与人数 1热心值 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

判判~ 发表于 2023-1-27 15:52
本帖最后由 判判~ 于 2023-1-27 16:01 编辑

[JavaScript] 纯文本查看 复制代码
const str = '<h1> 这是 标题 </h1><p>正文内容</p><h1>第一点</h1><p>一些内容</p><h1>第二点</h1><p>一些内容</p><p>其他内容</p>'
new DOMParser().parseFromString(str, 'text/html').querySelector('h1').textContent.trim()

// \S 匹配一个非空白字符

免费评分

参与人数 1热心值 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-24 20:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表