【问题标题】:JS: Replace quotes between an specific symbolJS:替换特定符号之间的引号
【发布时间】:2016-07-31 08:31:43
【问题描述】:

假设我有字符串:

"Audio":[{"ID":"0","Codec": "AC-3","Info":"192 Kbps, 48.0 KHz (2 channels)","Language":"Spanish (##He aqui "el teléfono que nunca suena" pero debería##)","Default":"Yes"}]

我想转换成:

"Audio":[{"ID":"0","Codec": "AC-3","Info":"192 Kbps, 48.0 KHz (2 channels)","Language":"Spanish (He aqui \"el teléfono que nunca suena\" pero debería)","Default":"Yes"}]

如您所见,我想转义“##”符号之间存在的所有引号,另外删除这些符号,我怎样才能通过使用replace() 方法来实现这一点?我的意思是正则表达式模式怎么可能。谢谢

【问题讨论】:

  • 您最初是如何得到无效 JSON 的?在那里修复它可能会更容易,而不是事后解决问题。
  • 我同意这一点。永远不要“手动”创建 JSON。始终使用数据结构和 JSON 序列化函数,您将永远不会遇到此类问题。 JSON 序列化可用于每一种中途现代编程语言。没有理由不使用它。
  • 来自 MediaInfo 的模板。没有办法应用某种格式,只是简单的文本,所以我发现的意外引号的唯一解决方案是用“##”分隔字段,所以任何人都可以有实际的回应吗?

标签: javascript json regex


【解决方案1】:

如果你打算这样做,那么

input.replace(/##(.*?)##/g, function(match) { return match.replace(/"/g, '\\"'); })

应该做的工作。

这会将所有##...## 序列替换为将其中的引号替换为转义引号的结果。

【讨论】:

  • 应该是/##(.*?)##/g
  • 它有效,现在如果我也取出##部分......但是如何
【解决方案2】:
var str = '"Audio":[{"ID":"0","Codec": "AC-3","Info":"192 Kbps, 48.0 KHz (2 channels)","L##a"g##uage":"Spanish (##He aqui "el teléfono que nunca suena" pero debería##)","Default":"Yes"}]';
var result = str.replace(/##(.*?)##/g, function(v) { return v.replace(/"/g, "\\\""); });

print(result)

Ideone Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2020-05-24
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2014-12-11
    相关资源
    最近更新 更多