2

サードパーティのサイトを読み込み、特定の単語を見つけ、Jquery 拡張機能のHighlightを使用してドキュメントの最も近いコンテキストを強調表示する小さな Javascript アプリケーションを構築しようとしています(正規表現を許可するための小さなカスタマイズを使用)。

まず、コンテキストを 500 文字に設定して、アプリケーションに周囲を強調表示させようとしていますが、何らかの理由で奇妙な場所で途切れます。この記事では、オバマという用語に合わせようとしていますが、私のスクリーンショットからわかるように、本来あるべきではない場所で途切れています。

誰が何が起こっているのか手がかりを持っていますか?

$(document).ready(function() {
    $.get(getUrlVars()["url"],
    function(data) {
        var fdata = $(data);
        var associationScope= 500;


        $.each(getUrlVars()["topics"].split(","), function(index, value) {
            if (getUrlVars()["associationScope"] == "context") {
                var associationScopeRegex = "((?!</span>)[\\s\\S]{0," + associationScope + "})" 
                    + value + "((?!<span class=\"associationScope\">)[\\s\\S]{0," + associationScope + "})";

                fdata.highlight(associationScopeRegex, {className: "associationScope"});
            }

            fdata.highlight(value, {className: "topicHighlight"});
        });

        $("#externalPage").html(fdata);

    });
});

ハイライト結果のスクリーンショット

4

1 に答える 1

2

文字列を介して構築するときは、いくつかの正規表現のメタ文字 (あなたの場合はバックスラッシュ) をエスケープする必要があります:

   var associationScopeRegex = "((?!</span>)(.|\\n|\\r|\\t){0," + associationScope + "})" 
       + value + "((?!<span class=\"associationScope\">)(.|\\n|\\r|\\t){0," + associationScope + "})";

文字列から正規表現を作成する場合、JavaScript パーサーは文字列が正規表現になることを認識していないという事実を考慮する必要があります。文字列として解析するだけです。文字列定数の構文では、一部の特殊文字にバックスラッシュを使用しているため、これらは文字列の一部として解釈されます。

(二重引用符文字のバックスラッシュを 2 倍にする必要はありません。正規表現の単純な二重引用符のままにしても問題ありません。)

于 2013-04-20T00:00:09.780 に答える