如何使正则表达式替换json文件中的键的值

时间:2013-12-19 20:44:39

标签: regex

我想制作正则表达式,以便我可以进行“搜索/替换” 在一个有很多对象的json文件上。 每个对象都有一个名为“resource”的键 包含一个URL。

看看这些例子:

"resource":"http://www.img/qwer/123/image.jpg"

"resource":"io.nl.info/221/elephant.gif"

"resource":"simgur.com/icon.png"

我想制作一个正则表达式来替换整个网址 像这样的字符串: img / filename.format

这样,结果将是:

"resource":"img/image.jpg"

"resource":"img/elephant.gif"

"resource":"img/icon.png"

我刚开始使用正则表达式而且我是 完全迷失了。我在想一个有效的想法 写一些以这种模式开头的东西“resource”:“

以最后五个字符结尾。但我甚至不知道如何尝试 这一点。

我怎么能写正则表达式?

提前致谢!

3 个答案:

答案 0 :(得分:5)

试试这个:

Find: "resource":\s*"[^"]+?([^\/"]+)"
Replace: "resource":"img/\1

使用[^"]+?可确保匹配不会从当前条目的末尾滚动并吞噬太多输入,并且它不情愿(添加了?)因此它获取整个图像文件名称(而不是最后一个字符)。

编辑:

我在密钥箱后面添加了可选的空格。

使用您的pastebin查看此正则表达式的live demo

答案 1 :(得分:3)

Regex

.*\/

Regular expression visualization

Debuggex Demo

这将找到您要替换的文本。如果您想查找以下正则表达式所需的全文,请将其替换为img/

("resource":").*\/

Regular expression visualization

Debuggex Demo

然后用$1img/代替,这应该给你组1和img部分。

如果有任何问题,请告诉我

注意:我个人只会使用对象,因为您拥有JSON并将其解析为对象然后迭代对象并独立更改每个对象上的每个资源而不是查找魔术弹

答案 2 :(得分:2)

如果您的JSON是包含resource字段的对象数组,我会分3步执行:转换为对象,查找资源并替换它们,转换回字符串(可选)

var tmp = JSON.parse('<your json>');
for (i = 0; i < tmp.length; ++i) {
    for (e in tmp[i]) 
        if (e == 'resource') 
            tmp[i][e] = tmp[i][e].replace(/.*(?=img\/.*\..*)/,'') 
}
tmp = JSON.stringify(tmp);