【问题标题】:Javascript Regex - negative lookbehind and lookaheadJavascript 正则表达式 - 消极的后视和前瞻
【发布时间】:2017-03-22 20:40:57
【问题描述】:

我正在尝试将数据解析为 JSON。数据如下所示:

[{ 
    'Id': 1,
    'FirstName': 'bob',
    'LastName': '',
    'Description': 'description can include escaped single quotes: \'.' 
}]

结果应该如何:

[{ 
    "Id": 1,
    "FirstName": "bob",
    "LastName": "",
    "Description": "description can include escaped single quotes: \'."
}]

重点是用双引号替换所有未转义的单引号,同时保留转义的引号。

我有正则表达式,它已经很好地将单引号转换为 JSON 的双引号,同时忽略转义的单引号。

/((?!\\).{1}|^.{0,0})\'/g

问题: 问题在于,对于'LastName': '' 位,它仅将第一个引号替换为 " 而不是第二个... 使其变为:"LastName": "',这是无效的JSON。

问题:如何修改我的正则表达式以确保替换两个单引号?我觉得连续两次运行string.replace 是一个肮脏的解决方案......

【问题讨论】:

  • 如果您的数据是 JavaScript 文字,请使用 a JavaScript parser。
  • 你可以试试.replace(/'([^'\\]*(?:\\.[^'\\]*)*)'/g, '"$1"')
  • this one@WiktorStribiżew 怎么样
  • @revo 失败,因为转义的单引号已更改。

标签: javascript regex


【解决方案1】:

我认为将您的数据存储在 JavaScript 变量中并使用 JSON.stringify 将是实现您想要做的事情的最佳方式。它将为您处理转义特殊字符,您不必继续维护您的正则表达式来处理更多场景。

obj=[{  'Id': 1,  'FirstName': 'bob', 'LastName': '', 'Description': 'description can include escaped single quotes: \'.'}]
str=JSON.stringify(obj)

在此之后,您的 str 将具有以下值:[{"Id":1,"FirstName":"bob","LastName":"","Description":"description 可以包含转义的单引号:'。" }]

【讨论】:

    【解决方案2】:

    javascript 不支持 Lookbehind。你也不能用积极的前瞻来做到这一点。有一种更可靠的方法可以做到这一点,而无需考虑环顾四周:

    var str = str = `[{ 
        'Id': '',
        'FirstName': 'bo\\\\\\\\'b',
        'LastName': '',
        'Description': 'des\\\\\\'cription can\\\\' include \\\\\\\\'escaped\\'single quotes: \\'.' 
    }]`;
    
    console.log(str.replace(/(\\\\)+(')|\\+'|(')/g, function(match, p1, p2, p3) {
        return p2 ? p1 + '\\"' : (p3 ? '"' : match);
    }));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多