1

JSを使用して、タグの内側が読み取られたり一致したりするのを避けながら、htmlタグ+属性とスタイルを含む文字列内の特定の文字列を置き換えようとしています(元のタグをテキストに保持します)。

例えばこうなりたい<span> this is span text </span><span> this is s<span class="found">pan</span> text </span>キーワードが「パン」の場合

私はそれで正規表現を使用しようとしました..これまでの私の正規表現:

$(this).html($(this).html().replace(new RegExp("([^<\"][a-zA-Z0-9\"'\=;:]*)(" + search + ")([a-zA-Z0-9\"'\=;:]*[^>\"])", 'ig'), "$1<span class='found'>$2</span>$3"));

この正規表現は<span class="myclass"> span text </span>、search="p" のような場合にのみ失敗します。結果は次のとおりです。

<s<span class="found">p</span>an class="myclass"> s<span class="found">p</span>an text</s<span class="found">p</span>an>

*このトピックは、特定の文字で囲まれた文字列を置換することを避けながら、一致を見つけて一致した文字列を置換しようとするすべての人に役立ちます。

4

1 に答える 1

4

thg435 が言うように、HTML コンテンツを処理する良い方法は DOM を使用することです。

しかし、置換で何かを回避したい場合は、最初に回避したいものを一致させて、それ自体を置き換えることができます。

html タグを避ける例:

var text = '<span class="myclass"> span text </span>';

function callback(p1, p2) {
    return ((p2==undefined)||p2=='')?p1:'<span class="found">'+p1+'</span>';
}

var result = text.replace(/<[^>]+>|(p)/g, callback);

alert(result);
于 2013-05-17T09:15:18.473 に答える