2012-04-11 31 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不接受正則表達式作爲一個類型。所以,你只需要把正則表達式放在一個字符串中(前導/和後綴/,然後在解析它之後,你需要將正則表達式提供給新的RegExp(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/

+0

你可以在我的示例代碼,它是一個字符串看,所以我不太明白? – 2012-04-11 03:20:23

+0

是的,它是一個字符串,不是一個正則表達式,'JSON.parse()'不會將您的字符串轉換爲正則表達式。因此,當你傳遞'「/ http。+ \\ // g」'來匹配時,它會嘗試將其轉換爲正則表達式,並且不匹配字符串中的任何內容。查看我添加到我的答案的代碼,以便使其工作。 – jfriend00 2012-04-11 03:25:38

1

在JavaScript中,/.../語法正則表達式是一種特殊的語法,不只是一個字符串,如果你想存儲。你的正則表達式在JSON中是一個字符串,你需要使用RegExp constructor

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

我試過了,它不起作用。還有其他建議嗎? – 2012-04-11 03:19:52

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"));