【问题标题】:Extract JSON key-value map with a regex from a file使用正则表达式从文件中提取 JSON 键值映射
【发布时间】:2017-10-12 22:40:20
【问题描述】:

我在正则表达式方面并不是很强大,并试图用我自己的自行车手工编写的解析器来解决一个问题,但它在一些我无法预料的输入上失败了,问题如下:我有 JavaScript i18n 文件,连同翻译,包含一些可能在文件中某处定义的其他配置内容(这是使用手工解析器很难处理问题的主要原因),所以文件是这样的:

(function() {
    'use strict';
    //some configuration stuff (some other stuff may be insterted)
    var translations = angular.module('module.translations.languages.enUs', []);

    translations.constant('translationsName', {
     "first_label":"first_label_value",
     "second_label":"second_label_value"
     //etc
});

}());

上面的例子只是可能的模板选项之一,但它们都有一个共同点——翻译标签被定义为一个键值 json,它只不过是一个序列化为 json 的 java map。 我的目标是只从文件中获取这些键值 json,将其反序列化为映射,对其进行一些操作并再次将其插入。所以问题是:也许有人已经准备好并且经过验证的正则表达式可以处理这种情况 - 在文本中找到键值 json 的映射?如果是这样,我将非常感激! 谢谢, 干杯, 安德烈

【问题讨论】:

    标签: java json regex


    【解决方案1】:

    您可以使用此正则表达式来查找 "key":"value" 对:

    "([^"]+)"\s*:\s*"([^"]+)",?

    Group 1 是键,Group 2 是值

    它还会找到 "key": "value""key" :"value""key" : "value" 对。

    Demo on regexplanet(点击Java按钮,然后点击Test按钮)

    在 regex101 上也是 demo

    说明

    "([^"]+)" :捕获除双引号之间的双引号以外的任何字符(这是

    \s*? : 后跟零个或多个空格

    \s* : 后跟一个冒号

    \s* : 后跟零个或多个空格

    "([^"]+)" :捕获除双引号之间的双引号以外的任何字符(这是

    【讨论】:

    • 我有类似的问题。我用了你的正则表达式,它对我有用。谢谢。
    • 太棒了!感谢您的反馈。
    • 在值是数字时遇到问题,因此没有双引号?
    • 已经接近了以下正则表达式:("([^"]+)"\s*:\s*"([^"]+)")|("([^"]+)"\s*:\s*(\d+\.?\d*))|("([^"]+)"\s*:\s*(\w+)) 但这不能处理任何重叠,例如"list":"{\"num\":"\1\" , 仅返回:"list":"{\"
    • 嗨@MetricRat,用(?:"([^"]+)"|(\d+)) 替换第二组捕获"([^"]+)" 应该会回答您的请求。这是一个例子:regex101.com/r/bRacQh/2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多