【问题标题】:RegEx matching for handling "" in a JSON用于处理 JSON 中“”的正则表达式匹配
【发布时间】:2019-09-29 05:10:42
【问题描述】:

正则表达式处理涉及双引号的给定输入模式

输入:

{
"adad":""Dip. Clinico E Di Ricerca Clinica-u.o.c.i Divisione ,gg677"","asd":"","dadd":"13213","Finance":[{"Financial_Contact_End_Date":""},{"Financial_Monthly_End_Date":""}]
}

我已经尝试过这个正则表达式来处理提供的输入。

a.replace("\"\"","\"").replaceAll("(:\",)",":\"\",").replaceAll("(:\"})", ":\"\"}")

a.replace("\"\"","\"").replaceAll("(:\",)",":\"\",").replaceAll("(:\"})", ":\"\"}")

预期:

{
"adad":"Dip. Clinico E Di Ricerca Clinica-u.o.c.i Divisione ,gg677","asd":"","dadd":"13213","Finance":[{"Financial_Contact_End_Date":""},{"Financial_Monthly_End_Date":""}]
}

我该如何解决这个问题?

【问题讨论】:

  • 那不是json开头的。
  • 考虑使用 JSON.parse() 正确解析 JSON。如果输入无效,可能有助于与其创建者一起使其有效,这样您就可以简化代码并确保其可靠性。有关正则表达式的一些提示(和限制),请参阅this blog post
  • 唯一的问题是你不能只用"替换"",因为它可能是一个正常值:"",所以,你必须使用解析这个结构的规则来限定匹配.先列出规则,然后是正则表达式。

标签: javascript regex regex-negation regex-greedy


【解决方案1】:

如果你认为它只包含 一些 值,那么你可以尝试这样的正则表达式

查找:""([^"]*)""
替换:"$1"

https://regex101.com/r/mjewq0/1

但请注意,使用这种方法,只有一种方法可以包含文字“
在一个字符串中,那就是转义它\"

【讨论】:

    【解决方案2】:

    这个正则表达式将解决您的问题:

    (("")(?!(,|})))|((?<!:)(""))
    

    解释:

    这个正则表达式捕获所有不以'} 结尾的""s

    (("")(?!(,|})))
    

    这个正则表达式捕获所有不以:开头的""s

    ((?<!:)(""))
    

    理论:

    负前瞻

    (?!...)
    

    从表达式的当前位置开始,确保给定的模式不会匹配。不消耗字符。

    例如:

    /foo(?!bar)/

    foobar **foo**bar

    消极的后视

     (?<!...)
    

    确保给定的模式不会匹配并在表达式中的当前位置结束。图案必须具有固定宽度。不消耗字符。

    例如:

    /(?&lt;!not )foo/

    不是 foo 而是 foo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      相关资源
      最近更新 更多