この正規表現を使用して、!?で始まり、?!で終わり、間に別の変数(この例では「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" );
しかし、成功せず、結果は以前と同じです。