【问题标题】:Regex should find only one level of json properties正则表达式应该只找到一级 json 属性
【发布时间】:2013-10-17 22:57:47
【问题描述】:

我有一个 js 文件的文本。我想找到函数的所有名称(例如“destroy”、“create”),但我只想找到“第一”级函数 - “close: function”或“success: function”不应该匹配。 我的正则表达式:\,+\s+(\S+:)\s+function 现在我找到了所有函数名称。请帮我处理我的正则表达式。

(function () {
    Create("object", {
            customProperty: {
                a: 1,
                b: 2
            },
            property1: 1,
            property2: 2,
            init: function () {

            },
            listeners: {
                close: function (a, b) {
                    return 1;
                }
            }
            destroy: function () {

            },
            create: function () {
                request({
                    success: function (response, record) {}
                });
            }

        }
    }

).call(this);

【问题讨论】:

  • 我不认为你理解正则表达式背后的意图。如果你构造一个 long 字符串并从那个长字符串中请求 first 级函数,你能做到这一点吗? (当然,同时保留您当前拥有的任何空白)
  • 是的,我构造了一个长字符串,但我无法理解正则表达式应该如何
  • @LALALA:那是因为不可能。
  • @LALALA,正如迪特里希所说,使用正则表达式是不可能的。您必须找到其他替代方案。正则表达式不能治愈everything!

标签: regex parsing


【解决方案1】:

用标准正则表达式证明这是不可能的。事实上,这是“经典”的不可能问题之一,要求 CS 学生证明这个问题是不可能用正则表达式解决的。

扩展正则表达式的一些变体可能是可能的:JavaScript 允许反向引用,但我认为这还不够。

您必须找到替代解决方案。

见:Can regular expressions be used to match nested patterns?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    相关资源
    最近更新 更多