Javascript 搜索字符串但忽略标记

Javascript 搜索字符串但忽略标记,javascript,regex,Javascript,Regex,我是一个试图搜索字符串的发生,但不想匹配它们,如果它们是锚标签的一部分 var str = 'hey there. <a href="github.com">github.com/bvaughn</a>'; str.match(/git/gi) var str='hey here'; str.match(/git/gi) 上面的代码与锚标记的git inside href和innerHTML都匹配。我想忽略第一场比赛。忽略“开始”和“结束”选项卡,但仍搜索innerH

我是一个试图搜索字符串的发生,但不想匹配它们,如果它们是锚标签的一部分

var str = 'hey there. <a href="github.com">github.com/bvaughn</a>';
str.match(/git/gi)
var str='hey here';
str.match(/git/gi)
上面的代码与锚标记的git inside href和innerHTML都匹配。我想忽略第一场比赛。忽略“开始”和“结束”选项卡,但仍搜索innerHTML

这可以通过修改正则表达式来实现吗?我试过几种组合,但我就是做得不对

更新

让我解释一下我的实际用例。我正在尝试创建类似于chrome内置搜索的搜索界面,我们在其中突出显示页面中出现的文本。为此,我使用了react组件-。这对普通文本来说非常好,但我想在突出显示URL之前自动链接文本中的URL

在文本中有标记并将其传递给上面的组件会弄乱标记,因为它也匹配其中的字符。因此,我希望它能够修改锚标签的打开和关闭标签,但是考虑其余部分。

我希望我能以某种方式调整正则表达式以忽略锚标记。

试试这个正则表达式:

var str = 'hey there. <a href="github.com">github.com/bvaughn</a>';
str.match(/git/gi)
var str='hey here';
str=str.replace(/(.*)/g,“$1”)
console.log(str);
str.match(/git/gi)

老实说,这个问题和答案让我很恼火。这个话题在这里已经讨论了几十次了

首先,您不应该使用mike510a的答案。只有当您的内容不在DOM中时,才应使用来自JUnitorNunes7的答案。原因如下:

  • innerHTML
    将销毁事件
  • innerHTML
    将触发DOM的重新生成
为了避免这种情况,您需要修改文本节点本身。但是,与其重新发明轮子,不如使用jQuery比较文本高亮插件。唯一使用纯JavaScript的是。因为您使用的是React,所以我建议您使用这个

以您的情况为例:

新标记(document.querySelector(.context”).Mark(“git”)

你好。

将html与reg exp匹配是一个糟糕的想法为什么不将该字符串指定为元素的
innerHTML
,然后在元素中搜索文本而不是字符串?是的,可能有一些边缘情况和限制,但为什么要花那么多时间做一些简单的事情呢?请参阅
str.replace(/]*>/g,”)。match(/git/gi)
我添加了一个答案,删除了整个
元素,而且不仅仅是HTML标记——这是最糟糕的答案——您还添加了整个额外的javascript代码库来完成这样一个只需要一两行代码的简单任务。修改DOM没有什么错——Javascript基本上就是这样设计的。回答得好,但从长远来看,可能要少做很多工作。我不同意。如果实现正确,则需要更多代码。您必须迭代文本节点,查找匹配项,拆分下一个节点,插入新创建的
元素。由于他想建立一个搜索,他还需要一个方法来删除突出显示-另一种方法是必要的。事实上,你会很快意识到这就是mark.js所做的,没有理由重新设计整个轮子。编辑之后,现在你是对的——用例实际上并不在最初的问题上——正确实现这样一件事可能需要更多的工作