首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找<h1>Kalani Doe</h1>,但不查找<h1>Kalani Do \\ Profile</h1>的Regex

查找<h1>Kalani Doe</h1>,但不查找<h1>Kalani Do \\ Profile</h1>的Regex
EN

Stack Overflow用户
提问于 2022-04-24 02:18:40
回答 2查看 21关注 0票数 0

我需要在H1元素中找到名字和姓氏,例如,

代码语言:javascript
复制
<h1>Kalani Doe</h1>

但是没有一个在里面有“个人资料”这个词,比如,

代码语言:javascript
复制
<h1>Kalani Doe | Profile</h1>

我知道我需要使用?!,但我无法理解如何将正负结合起来。

我试过这个,

代码语言:javascript
复制
(<h1>(.+?)<\/h1>)(?!<h1>(.+?)Profile<\/h1>)

但没起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-24 02:34:57

您可以使用负查找(?<!chars)

代码语言:javascript
复制
const str = `<h1>Kalani Doe</h1>
<h1>Kalani Doe | Profile</h1>
<h1>John  Doe</h1>`;

let m = str.match(/<h1>.*(?<!Profile)<\/h1>/gm)
console.log(m);

票数 0
EN

Stack Overflow用户

发布于 2022-04-24 09:31:50

如果您可以使用Dom解析器,则可以获取所有h1元素,并检查字符串是否包含配置文件。

因为只有regex标记,并且假设里面没有其他尖括号,所以可以使用否定式字符类而不是.+?,因为点可以匹配任何字符。

如果配置文件不在结束标记之前:

代码语言:javascript
复制
<h1>[^<]*<(?<!\bProfile<)\/h1>
  • <h1>匹配
  • [^<]*<匹配除<以外的任何字符,然后匹配<
  • (?<!\bProfile<)断言左边不是Profile<
  • \/h1>匹配/h1> (注意,取决于模式分隔符,/本身不需要转义)

Regex演示

如果根本没有个人资料的话:

代码语言:javascript
复制
<h1>(?![^<]*\bProfile\b)[^<]*<\/h1>

Regex演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71985016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档