【问题标题】:Remove first and last backslash?删除第一个和最后一个反斜杠?
【发布时间】:2017-03-03 20:34:14
【问题描述】:

我在 javascript 中创建了一个示例数据生成器,输出是一个字符串化的 json 对象。现在我需要从输出中的每个元素中删除第一个/最后一个反斜杠。

当前输出为:

array(\"'This is' a test\",\"Testie Test\",\"Bob the tester\",\"Wanna test "some" more\")

需要输出:

array("'This is' a test","Testie Test","Bob the tester","Wanna test \"some\" more")

我需要转义双引号的文本,但我需要删除第一个和最后一个反斜杠,因为数据随后被复制并上传到另一个工具并被这些反斜杠打断。

我可以使用简单的正则表达式轻松删除所有反斜杠:

var = var.replace(/\\\\/g,"") 

然而,内部文本不再被转义。我尝试了更复杂的正则表达式的变体来实现这一点,但没有成功。任何帮助表示赞赏。

谢谢

【问题讨论】:

  • 为什么要删除所有的反斜杠? JSON 使用反斜杠对文本进行编码以转义引号。
  • 原始 JSON 是什么?格式为{"name": value, ...}
  • @BitByte 因为第一个/最后一个反斜杠破坏了使用此示例数据的第二个工具。在我可以为第二个工具创建 Web 服务之前,这是一个必要的步骤。
  • 是的 {"city_name": "vancouver", "prov": "bc", ...}
  • 无视以上...原文为:{"id":"xxxx", "data":["text","text","text",...]},{" id":"xxx", "data":[.....]

标签: javascript json regex


【解决方案1】:

^(\\.)*(\\).$ 将匹配第一个反斜杠和最后一个字符之前的反斜杠。

您可以直接测试字符串是否以\" 开头并以\" 结尾,而不是正则表达式:

if (s.startsWith('\\"') && s.endsWith('\\"')) {
  clean_s = '"' + s.substr(2, s.length-4) + '"';
}

【讨论】:

    【解决方案2】:

    你可以使用这个正则表达式来匹配你的字符串:

    ^\\(.*)\\(")$
    

    第一个捕获组将捕获整个字符串,不包括起始反斜杠,但它不会捕获最后一个 qoutes。最后的 qoutes 将在第 2 组中捕获。您可以连接这两个组以获得所需的输出!

    Regex Demo

    【讨论】:

      【解决方案3】:

      尝试使用JSON.parse(object)。它应该返回整个对象,解析。

      此外,console.log(JSON.parse(object)["data"]) 应该将整个值打印为数组。

      根据您的评论,考虑到 json 的格式如下:{"records": [{"id":"xxxx", "data":["text","text","text",...]},{"id":"xxx", "data":[ ..... ]},...]}

      var parsed = JSON.parse(object);
      var output = []
      for (var i = 0; parsed["records"].length < i; i++) {
        output.push(parsed["records"][i]["data"]);
      }
      document.getElementById("textareafieldid").value = output;
      

      请确保将脚本中文本字段的 id 设置为与 HTML 中定义的相同。

      <textarea id='textareafieldid'></textarea>
      

      【讨论】:

      • 输出到 web 应用程序中的 textarea 字段而不是控制台。抱歉,我是 javascript 新手,尝试此操作时没有得到任何输出
      • 这是浏览器javascript?没有运行节点或任何东西?
      • 是的,正确...我接手了这个项目,并正在用 php 重写并创建一个 Web 服务,但需要解决这个问题,因为它经常使用
      • 谢谢你成功了!感谢大家的回复和帮助。
      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 2017-03-19
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多