【问题标题】:jQuery Regex Ignore Surrounding JS tagsjQuery Regex 忽略周围的 JS 标签
【发布时间】:2012-04-24 00:47:32
【问题描述】:

我在 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 魔法来搜索我想要的部分,但我不知道这对于快速文本搜索是否有效或可行。

任何建议将不胜感激!

【问题讨论】:

  • 标签内的术语呢?

标签: jquery html regex


【解决方案1】:

这个(?<=[^\/])jquery 会搜索所有前面没有/...的jquery...

http://regexr.com?30o8n

【讨论】:

  • 这会捕捉到很多情况,但如果标签看起来像这样就不会成立:
  • jquery 出现在标签之外的可能情况有哪些?仅限空格?
  • 那么问题是正则表达式lookbehind 不允许变长字符串。如果是这样,那就更容易了。
  • 我正在寻找标签或属性之外的所有纯文本。
【解决方案2】:

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

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

这里有一个简单的例子让你开始:http://jsfiddle.net/8BeEv/

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

【讨论】:

    【解决方案3】:

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

    我认为这种解决方案不会处理跨越多个文本节点的文本,即在中搜索“快速”

    the <strong>qui</strong>ck brown fox
    

    但是解决这些情况所需的复杂性比我现在需要的要高得多=P

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 2014-10-07
      相关资源
      最近更新 更多