jQuery正则表达式忽略周围的JS标签

时间:2012-04-24 00:47:32

标签: jquery html regex

我在jQuery中的随机HTML页面上执行简单的文本搜索/替换,但是我忽略了属性中出现的术语,即如果我的术语是jquery,我想忽略所有<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> jquery中的术语,但仍然击中外部的术语。现在我的代码看起来有点像这样:

$("div#content").html($("div#content").text().replace(/(jquery)/g, "stuff"));

我一直在关注积极/消极的前瞻/外观,但我无法正确对待它。除了jQuery之外我不能使用任何外部库,我已经看过this post了。

我想一个解决方案可能是使用一些indexOf魔术搜索我想要的部分,但我不知道这对于快速文本搜索是否有效或可行。

任何建议都将不胜感激!

3 个答案:

答案 0 :(得分:1)

(?<=[^\/])jquery搜索所有jquery之前没有/的情况......除非术语jquery有其他方式出现在属性中?

http://regexr.com?30o8n

答案 1 :(得分:1)

这是使用手动编码解析器的好例子。它几乎是唯一可以让您可靠地处理所有要处理的案例的方法。

基本上,将解析器视为状态机。它需要读取输入文本,一次一个字符,并且每个字符根据该字符及其当前解析状态执行适当的操作。这个模型使得忽略HTML标记中出现的任何文本,同时处理其他所有文本,这是相对微不足道的。

以下是一个简单的示例:http://jsfiddle.net/8BeEv/

请注意,示例代码当前不处理HTML标记内的转义序列(例如,标记内的\>序列会破坏它),格式错误的HTML或其他可能但通常罕见的错误情况。

答案 2 :(得分:0)

刚刚偶然发现,通过仅查看文本节点,几乎可以处理我以前遇到的问题: https://stackoverflow.com/a/4515063/660036

我认为此解决方案不会处理跨越多个文本节点的文本,即在

中搜索“快速”
the <strong>qui</strong>ck brown fox

但解决这些案件所需的复杂程度远高于我现在所需的复杂程度= P