在正则表达式html中跳过标签和空格

时间:2012-11-25 01:34:02

标签: javascript html regex tags

我正在使用这个正则表达式来查找以!开头的字符串,以?!结尾,并在其间有另一个变量(在此示例中为“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" );

但没有成功,结果与以前相同。

2 个答案:

答案 0 :(得分:1)

也许这个:

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

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

答案 1 :(得分:0)

使用此正则表达式解决了 的问题:

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