【问题标题】:Skipping over tags and spaces in regex html跳过正则表达式 html 中的标签和空格
【发布时间】:2012-11-25 01:34:02
【问题描述】:

我正在使用这个正则表达式来查找一个以 !? 开头、以 ?! 结尾并且中间有另一个变量(在本例中为“a891d050”)的字符串。这是我使用的:

var pattern = new RegExp(/!\\?.*\s*(a891d050){1}.*\s*\\?!/);

它与这个匹配正确:

!?v8qbQ5LZDnFLsny7VmVe09HJFL1/WfGD2A:::a891d050?! 

但是当字符串被html标签分解时会失败。

<span class="userContent"><span>!?v8qbQ5LZDnFLsny7VmVe09HJFL1/</span><wbr /><span class="word_break"></span>WfGD2A:::a891d050?!</span></div></div></div></div>

我尝试添加 \s{space}*,但仍然失败。 问题是,如果我想在匹配中忽略空格和 html 标记,我需要考虑哪些(特殊?)字符。

edit: 这就是我使用正则表达式:

var pattern = /!\?[\s\S]*a891d050[\s\S]*\?!/;

document.body.innerHTML = document.body.innerHTML.replace(pattern,"new content");

在我看来,当它遇到它替换的“普通”字符串时,它是正确的。但是,当面对在其周围和内部具有类的 String 时,它会使类 变得一团糟,这取决于上下文。所以我决定尝试jquery-replacetext-plugin(因为它承诺保留标签原样) 像这样:

$("body *").replaceText( pattern, "new content" );

但是没有成功,结果还是和以前一样。

【问题讨论】:

  • new RegExp(/.../) 是错误的。它应该是/.../new RegExp("...")。此外,{1} 是 100% 冗余的。
  • 而且,FWIW,序列.*\s* 可以只是.*,因为你没有捕获任何东西。
  • 您的正则表达式中的每个\\? 不应该是\? 吗? \\? 可选地匹配一个实际的反斜杠字符,而\? 匹配一个问号。此外,{1} 是多余的,默认情况下会发生这种情况。
  • It does match 在您的 html 字符串上(至少,它在 Chrome 中有效)。
  • @nnnnnn 你能解释一下你是如何测试它的吗?它不适用于 Chrome。 Chrome 也是我唯一需要的浏览器。

标签: javascript html regex tags


【解决方案1】:

也许是这样的:

var pattern = /!\?[\s\S]*a891d050[\s\S]*\?!/;

[\s\S] 应该匹配任何字符。我还删除了 {1}。

【讨论】:

    【解决方案2】:

    这个问题显然通过使用这个正则表达式解决了:

    var pattern = /(!\?)(?:<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])*?>)?(.)*?(a891d050)(?:<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])*?>)?(.)*?(\?!)/;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 2021-09-30
      相关资源
      最近更新 更多