【问题标题】:Javascript Regex to match value of JSON key value pairJavascript 正则表达式匹配 JSON 键值对的值
【发布时间】:2016-08-28 16:11:19
【问题描述】:

鉴于以下键值对,我如何仅匹配值(包括引号)?

说明:我正在我的 IDE 中进行查找和替换。我有数百个键/值对,其中的值需要从字符串更改为对象。所以基本上替换了值。

"ElevationFilenameIn": "Input raster elevation file",
"TargetCRS": "Target vertical coordinate reference system Type",
"featureName": "The name of the feature to extract, for example \"Vegetation\" or \"Water\"",
"TargetCRScode": "Target vertical coordinate system Code",
"TargetCRSfile": "The projection (.prj) file in shoebox to be used for this inputfile"

My attempt(不工作,甚至关闭):

[:]\s*(\"\w*\")

【问题讨论】:

  • 您可以使用 ("(.*?)") 但我怀疑这是否是您真正需要/想要的
  • 不需要将冒号括起来,甚至不需要将它包含在正则表达式中。这应该可以... (\".*\"), 不要忘记在替换中添加尾随逗号。
  • @user6188402 是的,这也有可能。我已更新我的问题以包含转义引号。

标签: javascript regex


【解决方案1】:

您可以使用该模式:

[:]\s(\".*\")

并通过以下链接对其进行测试:https://regex101.com/r/nE5eV3/1

【讨论】:

  • 如果它是一个对象,例如"ElevationFilenameIn": { "foo": "bar" }
  • @EdwinIkechukwu,你需要匹配整个字符串{ "foo": "bar" },包括大括号吗?
【解决方案2】:

我想这个也能很好地完成这项工作。一个好的部分它不使用任何捕获组,一个不好的部分与公认的答案相比成本更高。

[^:]+(?=,|$)

Debuggex Demo

Regex101 Demo

【讨论】:

  • [^:\"]+(?=,|$) 去掉引号:)
【解决方案3】:

获取价值

[^:"]+(?="})

按键获取值

如果您想选择一个特定的键,可以这样做:

[^:KEY"]+(?="})

【讨论】:

    【解决方案4】:

    复杂 JSON 对象中的所有键值均值。

    "[a-zA-Z0-9 -]*"(?=:):[a-zA-Z0-9 "-ć]*(?<=")|"[a-zA-Z0-9 -]*"(?=:):[a-zA-Z0-9 "-ć]*(?=,)|"[a-zA-Z0-9 -]*"(?=:):[a-zA-Z0-9 "-ć]*(?=\w+)
    

    【讨论】:

      【解决方案5】:

      当值是另一个 json 对象时,这是一个有效的方法:

      :\s*["{](.*)["}]\s*[,}]
      

      它不包括捕获组中的引号/括号。如果你想包含这些,捕获组很容易修改:

      :\s*(["{].*["}])\s*[,}]
      

      由于 json 忽略空格,因此表达式还可以处理不同的空格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-23
        • 2019-08-17
        • 2018-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-12
        • 2023-04-05
        相关资源
        最近更新 更多