我在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魔术搜索我想要的部分,但我不知道这对于快速文本搜索是否有效或可行。
任何建议都将不胜感激!
答案 0 :(得分:1)
此(?<=[^\/])jquery
搜索所有jquery
之前没有/
的情况......除非术语jquery
有其他方式出现在属性中?
答案 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