如何使用正则表达式和“”字符正确解析 JSON

How to Properly Parse JSON with RegEx and '' character?

本文关键字:JSON 字符 何使用 正则表达式      更新时间:2023-09-26

给定以下代码:

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

它返回空值。我认为这与 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));

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/

在javascript中,RegExp的/.../语法是一种特殊的语法,而不仅仅是一个字符串。如果要将正则表达式存储为 JSON 中的字符串,则需要使用 RegExp 构造函数。

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

使用 RegExp

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