正则表达式在页面上找到包含内部标签的单词

时间:2009-12-03 18:29:55

标签: javascript jquery regex dom

感谢Chetan Sastry我有这个正则表达式代码来解析我的页面以获取单词列表并将TM添加到它们中。

var wordList = ["jQuery UI", "jQuery", "is"];
var regExp = new RegExp("\\b" + wordList.join("\\b|\\b") + "\\b", "g");
var $elem = $("#divWithText");
$elem.html($elem.html().replace(regExp, "$&™"));

这个正则表达式几乎是我所需要的。 但是,链接看起来像:

<a href="/0/products/jQuery">jQuery</a>

最终将TM附加到href内部的jQuery而不是标记之间的jQuery。

任何人都可以帮忙吗?

我要查找的单词列表是非常具体的产品名称,它们可能出现在标签内的唯一位置是在这样的链接中。

4 个答案:

答案 0 :(得分:8)

实现此目的的唯一可靠方法是逐步执行每个子后代,如果是文本节点,则运行替换。

实现:

按照自己的方式行事,不仅会冒着无意中替换实际HTML的风险,而且还会擦除目标元素中的任何DOM元素以及任何相应的事件处理程序。

答案 1 :(得分:1)

J-P linked为这项工作提供了一些好的工具。

使用直接jQuery:

$elem
  .contents()
  .filter(function() {
    return this.nodeType == Node.TEXT_NODE;
  })
  .each(function(){
    $(this).text($(this).text().replace(regExp, "$&&trade;"));
  });

(见How do I select text nodes with jQuery?

答案 2 :(得分:0)

如何将"jQuery</a>""jQuery UI</a>"添加到搜索字词列表中呢? (您需要转义RegEx的特殊字符才能正常工作,但它可能更容易(如果不那么优雅)解决方案。)

答案 3 :(得分:0)

如果您只是尝试替换链接中的单词,则以下内容应该有效:

var wordList = ["jQuery UI", "jQuery", "is"];
var regExp = new RegExp("\\b" + wordList.join("\\b|\\b") + "\\b", "g");
var $elem = $("#divWithText a");
$elem.html($elem.html().replace(regExp, "$&&trade;"));