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

'plain'文字列に遭遇すると、それが正しく置き換えられるように見えます。しかし、その周りと内部にクラスがある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 に答える