1

テキストをスパンでラップする関数があります

$(".ui-content").html(function (i, v) 
  {  
     return v.replace(/(CANADA)/gi, '<span class="query">$1</span>'); 
});

ただし、 html である"div"or "span"orという用語を渡すと"a"、もちろん、ページはひどくめちゃくちゃになります。

regexHTMLコードの一部ではないが機能するテキストのみを削除する<strong>には、何を変更できますかA strong person is a helpful friend

4

3 に答える 3

1

@elclanrs と同じコンセプトですが、否定的な後ろ姿を模倣しています。

$(".ui-content").html(function (i, v) {       
     return v.replace(/([^</])(strong)/gi, ' <span class="query">$2</span> ');
});​

http://jsfiddle.net/39VMe/

また、JavaScript 正規表現の特定の制限を処理する方法についての良い記事: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

于 2012-07-05T03:02:28.550 に答える
1

いつものように、救助へのノード操作!

function toArray(obj) {
    var r = [];

    for(var i = 0; i < obj.length; i++) {
        r.push(obj[i]);
    }

    return r;
}

$('.ui-content').each(function() {
    var stack = [this];
    var c, n;

    while(c = stack.pop()) {
        var childNodes = toArray(c.childNodes);

        for(var i = 0; n = childNodes[i]; i++) {
            if(n.nodeType === 1) {
                stack.push(n);
            } else if(n.nodeType === 3) {
                var matches = n.nodeValue.split(/(CANADA)/i);

                for(var i = 0; i < matches.length; i++) {
                    var newNode;

                    if(/CANADA/i.test(matches[i])) {
                        newNode = document.createElement('span');
                        newNode.className = 'query';
                        newNode.appendChild(document.createTextNode(matches[i]));
                    } else {
                        newNode = document.createTextNode(matches[i]);
                    }

                    n.parentNode.insertBefore(newNode, n);
                }

                n.parentNode.removeChild(n);
            }
        }
    }
});

これがデモjsFiddleです。

于 2012-07-05T02:34:36.330 に答える
0

通常、html の解析に正規表現を使用しないことを主張する人がいるのは知っていますが、これは問題なく機能しているようです。これは否定先読みを使用して、実際の<strong>タグではなく「strong」という単語のみを置き換えます。

/strong(?!>)/

編集:

より柔軟で属性を許可するこの正規表現を使用します。

/strong(?!(>|\s\w+=))/g;

いずれにせよ、それはすべて HTML に依存します。正規表現がそれを行わない場合は、適切に解析する必要があります。

デモ: http://jsfiddle.net/mGLjb/2/

于 2012-07-05T02:45:47.133 に答える