0

次のような JSON オブジェクトがあります。

    var jsonObject = {"regex":"<span class=\"Value\">\\$(.+?)<\\/span>"};

私の目標は、この正規表現を使用して html ドキュメントから値を取得することです。

    var match = html.match(new RegExp(jsonObject.regex, 'i'));

ただし、これはエラーを返します。問題は、正規表現文字列のエスケープ シーケンスが文字列 jsonObject.regex で失われていることです。

jsonObject.regex を呼び出すと、

    < span class="Value">\$(.+?)<\ /span>

(\" や \\ などのエスケープ シーケンスは失われます)

javascript を使用してそれぞれの文字を置き換えることはできますが、json オブジェクトに正しい形式が既にあるため、効率が悪いようです。

手がかりや回避策をいただければ幸いです。ありがとう!

4

1 に答える 1

0

あなたはここで2つのことを間違っています。

何よりもまず、HTML で任意の正規表現を使用するプログラムを作成しようとしています。そうしないでください。クライアント側で DOM を自由に使用できるため、利用可能なセレクター エンジンのいずれかを使用する必要があります。例としては、ブラウザーのビルトインdocument.querySelectorAll()Sizzle (jQuery の一部でもある)、NWMatcher 、またはXPath.jsのような XPath ベースのセレクター エンジンが含まれます。

次に、JSONシリアライザーを使用してサーバー側でJSON文字列を構築しないことは明らかです。そうしないと、クライアント側で混乱したエスケープなどは発生しません。

最後に、最初のコード サンプルにあるのは JSON ではありません。これは JavaScript オブジェクト リテラルです。JSON は常に文字列です。

'{"regex":"<span class=\"Value\">\\$(.+?)<\\/span>"}'

jQueryで必要と思われるものを選択するのは、次のように簡単になります

var value = $("span.value").text();

しかし、私が言ったように、jQuery を使用しなければならないというわけではありません。HTML スクレイピングが主な目的である場合は、より軽量な代替手段があります。

于 2012-05-14T08:51:55.723 に答える