0

我正在使用这个正则表达式来查找一个以 !? 开头、以 ?! 结尾的字符串,并且中间有另一个变量(在本例中为“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 标记,我需要考虑哪些(特殊?)字符。

编辑:这就是我使用正则表达式的方式:

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" );

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

4

2 回答 2

1

也许是这样:

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

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

于 2012-11-25T02:52:05.437 回答
0

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

var pattern = /(!\?)(?:<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])*?>)?(.)*?(a891d050)(?:<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])*?>)?(.)*?(\?!)/;
于 2012-11-25T17:41:00.047 回答