【发布时间】:2016-10-28 15:54:04
【问题描述】:
我正在尝试搜索字符串的出现,但如果它们是锚标记的一部分,则不想匹配它们。
var str = 'hey there. <a href="github.com">github.com/bvaughn</a>';
str.match(/git/gi)
上面的代码匹配了 git inside href 和锚标签的 innerHTML。我想忽略第一场比赛。忽略打开和关闭选项卡,但仍搜索 innerHTML。
这可以通过修改正则表达式来完成吗?我已经尝试了几种组合,但我只是没有得到正确的结果。
更新
让我解释一下我的实际用例。我正在尝试创建类似于 chrome 中内置搜索的搜索界面,我们在其中突出显示页面中出现的文本。为此,我使用了一个反应组件 - react-highlight-words。这对于普通文本非常有效,但我想在突出显示它们之前自动链接文本中的 url。
在文本中包含标记并将其传递给上述组件会弄乱标记,因为它也匹配其中的字符。所以我希望它忽略锚标记的开始和结束标记,但考虑其余部分。
This is where the relevant matching happens. 我希望我能以某种方式调整正则表达式以忽略锚标记。
【问题讨论】:
-
用 reg exp 匹配 html 是个坏主意
-
为什么不将该字符串指定为元素的
innerHTML并在元素中搜索文本而不是字符串?是的,在一些极端情况和限制条件下可能是可能的,但为什么要花这么多时间来做一些原本如此简单的事情呢? -
str.replace(/<[^>]*>/g,"").match(/git/gi) -
我添加了一个删除整个
<a href=""></a>元素的答案,而不仅仅是 HTML 标签
标签: javascript regex