JavaScript RegExp-如何根据条件匹配单词

JavaScript RegExp-如何根据条件匹配单词,javascript,angularjs,regex,expression,Javascript,Angularjs,Regex,Expression,我正在构建一个搜索结果页面(角度),但使用正则表达式根据条件突出显示搜索的“关键字”。我在使用RegExp获取正确的条件时遇到问题,因此,如果我当前的语法混乱,我深表歉意,我已经玩了好几个小时了 基本上,在这个测试中,我突出显示了单词“midlands”,我想突出显示每个“midlands”单词,除了“a”标记中的单词 更多信息,在视图呈现后,我获取重复结果的html内容,然后根据呈现的html和上述条件进行搜索。-如果这对任何人都有帮助的话。你完全错了。不要用正则表达式解析HTML——使用DO

我正在构建一个搜索结果页面(角度),但使用正则表达式根据条件突出显示搜索的“关键字”。我在使用RegExp获取正确的条件时遇到问题,因此,如果我当前的语法混乱,我深表歉意,我已经玩了好几个小时了

基本上,在这个测试中,我突出显示了单词“midlands”,我想突出显示每个“midlands”单词,除了“a”标记中的单词


更多信息,在视图呈现后,我获取重复结果的html内容,然后根据呈现的html和上述条件进行搜索。-如果这对任何人都有帮助的话。

你完全错了。不要用正则表达式解析HTML——使用DOM内置的HTML解析器,并在文本节点上显式运行正则表达式

首先我们得到所有的文本节点。使用jQuery,这是:

var texts = $(elem).content().get().filter(function(el){
    return el.nodeType === 3; // 3 is text
});
否则-请参阅答案,了解获取VanillaJS中所有文本节点的代码

然后,迭代它们并仅替换文本节点中的相关文本:

foreach(var text of texts) { // if old browser - angular.forEach(texts, fn(text)
    text.textContent = text.textContent.replace(/midlands/g, function(m){
       return "<b>" + m + "</b>";  // surround with bs. 
    });
}
foreach(文本的var text){//if旧浏览器-angular.foreach(文本,fn(文本)
text.textContent=text.textContent.replace(/midlands/g,函数(m){
返回“+m+”;//用bs环绕。
});
}

它与href attributes中的不匹配。或者至少从提供的链接看不匹配。请您更直截了当地说明问题所在,好吗?您的意思是,您希望只在标记之间而不在属性中获取米德兰的实例吗?或者具体地说,href attributeIt似乎在您创建的链接中起作用提供..您好,谢谢您的回复。我不希望在属性(如href等)中找到匹配项。否则这将破坏我的html。谢谢。@Jacques它几乎可以工作,但有2个实例不匹配,这是由于“>”字符。谢谢我已经研究了这一点,并找到了使用jquery方法的解决方案,虽然我必须查看每个元素,然后对每个关键字(如果提供的话)执行“each”。-冗长。我需要检查性能。我希望正则表达式会有一个语法过滤器,过滤掉“/”和“-”字符等。可能吧?不,我曾做过这样的建议,但由于边缘情况,没有人会遇到任何问题。它正在严重延迟ed.您可以在这里抓取一个简短的polyfill:用于转义
-
/
等的给定单词。
foreach(var text of texts) { // if old browser - angular.forEach(texts, fn(text)
    text.textContent = text.textContent.replace(/midlands/g, function(m){
       return "<b>" + m + "</b>";  // surround with bs. 
    });
}