0

次のコードが与えられます:

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

3 に答える 3

2

JSON は正規表現を型として受け入れません。そのため、正規表現を文字列に入れる必要があります (先頭の / と末尾の / を使用し、それを解析した後、正規表現を new 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/

于 2012-04-11T03:10:50.973 に答える
1

JavaScript では、/.../RegExp の構文は単なる文字列ではなく特別な構文です。正規表現を文字列として JSON に保存する場合は、 RegExp コンストラクターを使用する必要があります。

var config = JSON.parse('{"filter":"/http.+\\//g"}');
var result = a.match(new RegExp(config.filter));
于 2012-04-11T03:14:14.060 に答える
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"));
于 2012-04-11T03:25:46.273 に答える