RegExと '\'文字を使用してJSONを正しく解析する方法

2012-04-11 18 views
0

は、次のコードを考える:RegExと ''文字を使用してJSONを正しく解析する方法

var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage'; 
var result = a.match(/http.+\//g); 

は、期待される結果を生成します:["http://somesite.com/foo/bar/"]

を今、私はこれを行う場合:

var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage'; 
var config = JSON.parse('{"filter":"/http.+\\//g"}'); //notice the extra '\'? 
var result = a.match(config.filter); 

それはnullを返します。私はそれがJSONで\の文字列エスケープと関係していると推測します。私は単純な解決策を見逃しているように感じる。これをどうすれば解決できますか?ありがとう。

編集:

また、私はこれを試してみましたが、それは動作しません:

var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage'; 
var config = JSON.parse('{"filter":"/http.+\\//g"}'); //notice the extra '\'? 
var result = a.match(new RegExp(config.filter)); 

答えて

2

JSONは、タイプとして正規表現を受け付けません。だから、正規表現を文字列に置くだけで、正規表現を新しい正規表現(str)に渡して通常の表現にする必要があります。

あなたはこのようにそれを行うことができます。

var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage'; 
var x = JSON.parse('{"filter":"http.+/", "flags": "g"}'); 
x.filter = new RegExp(x.filter, x.flags); 
var result = a.match(x.filter); 
alert(result);​ 

の作業例をここに:http://jsfiddle.net/jfriend00/5pa2j/ JavaScriptで

+0

あなたはそれが文字列であることを私のコード例では見ることができますので、私は非常に従わないのですか? –

+0

はい、文字列です。正規表現ではなく、 'JSON.parse()'は文字列を正規表現に変換しません。したがって、 ''/http。+ \/// g "'を渡すと、正規表現に変換しようとしますが、それはあなたの文字列の中の何ものとも一致しません。私の答えに追加したコードを参照してください。 – jfriend00

1

は、正規表現のための/.../構文は特別な構文だけではなく、文字列であるあなたが保存したい場合。正規表現をJSONの文字列として使用するには、RegExp constructorを使用する必要があります。

var config = JSON.parse('{"filter":"/http.+\\//g"}'); 
var result = a.match(new RegExp(config.filter)); 
+0

私はそれを試して、それは動作しません。その他の提案はありますか? –

1

使用正規表現

var a = 'somegarbage=http://somesite.com/foo/bar/&moregarbage'; 
var config = JSON.parse('{"filter":"http.+/"}'); 
var result = a.match(new RegExp(config.filter, "g")); 
関連する問題