2012-05-14 6 views
0

(文字列が実際に正規表現パターンです):javascriptのjsonオブジェクトから文字列を抽出する際にエスケープシーケンスを保持する方法。次のように私は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オブジェクトで正しい形式を持っているので、それを行うのは非効率的なものと思われる。

任意の手掛かりや回避策が高く評価されています。ありがとう!

+0

どのエラーが表示されますか? –

答えて

0

ここでは2つのことが間違っています。

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

次に、JSONシリアライザを使用してサーバー側にJSON文字列を作成しないでください。そうしないと、クライアント側でmessed-upエスケープのようなことは起こりません。

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

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

あなたは私が言ったように、あなたはjQueryのを使用するようにバインドされていないような単純な

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

としてではなくなってしまうのjQueryにしたいように見えるものを選択:JSONは常に文字列ですHTMLスクレイピングが主な目標である場合は、軽量の代替手段があります。

+0

ありがとう!それは本当に役立ちます。私はDOMを使用することは、しばしばエラーにつながる可能性があるので、正規表現を使用してスクレイピングするより良い選択肢であることに同意します。私は実際に正規表現を使用して構築されたスクレイピングコードを構築しています。構造をDOMに変更するには、多くの時間が必要です –

関連する問題