【发布时间】:2018-07-06 02:47:06
【问题描述】:
我有 4 种不同情况的链接具有其他属性,其中 3 种我需要匹配并仅捕获链接的文本。
简而言之 - 前3个链接需要通过href属性匹配并捕获标签之间的文本。
<a href="https://example.com/page_url" data-some-id="" data-other-prop="">Link 1</a>
<a data-href="" href="http://Go to page" data-another-id="">Link 2</a>
<a data-other="" href="/Go to page" data-val-id="">Link 3</a>
<a href="http://example123.com/page" data-props-id="">Link 4</a>
正则表达式需要匹配:
- 包含“example.com”(链接 1 示例)或 的 URL
- 不包含域的链接(链接 2 示例),或
- 如果没有架构,例如 http(链接 3 示例)
- 非href 属性可以有不同的名称,因此'data-'、'style="' 和其他属性可以在href 之前或之后。
- 需要特定于anchor (
<a>)标签
不应捕获第 4 个链接。并且第 4 个链接将始终具有与链接 1 (example.com) 不同的域。
这 2 天我进行了很多尝试,但无法做到正确,通常是管道(正则表达式或)加上 '.*' 和否定匹配每次都会让我例如
<a.*(?:example\.com|(?!href="http?.*([\s])))+".*>(.*)<\/a>
似乎比看起来更难获得所需的匹配。
注意:这是针对字符串中的响应 HTML,匹配在应用于 DOM 之前发生。所以 jQuery 和 DOM 相关的解决方案是不可能的,抱歉。欢迎使用多个表达式进行渐进式捕获。
【问题讨论】:
-
你是说我应该将每个锚点都压缩到
href=".*"并从那里循环匹配吗?这绝对是一个可以接受的解决方案。我想我会用这种方法回答我自己的问题。认为这可能是对 stackoverflow 的要求。 -
这是一个字符串,如“注释”中所述。在作为响应发送之前不能使用 DOM。它基于 JS 的 API。循环和 IF 是给我的。
-
您可以将字符串作为 DOM 元素。请参阅this SO post 了解更多信息
-
感谢@ctwheels 的建议。对于 UI 脚本和 HTML 字符串响应,这绝对是需要牢记的。但是这个脚本也将在不支持 DOM 相关功能的服务器上使用。或者至少我在之前的尝试中遇到了语法问题。
标签: javascript regex