繁体   English   中英

正则表达式在javascript中的值和键周围添加双引号

[英]regular expression add double quotes around values and keys in javascript

我需要一个有效的 JSON 格式来请求 ES。 我有一个像

{ 
time:  { 
          from:now-60d,
          mode:quick,
          to:now } 
}

但是当我尝试使用JSON.parse出现错误,因为我的字符串应该像

 { 
time:  { 
          "from":"now-60d",
          "mode":"quick",
          "to":"now" } 
}

所以我的问题是,有什么解决方案可以在我的字符串的键和值周围添加双引号?

谢谢

也许你可以使用:

str.replace(/([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)/g, "\"$1\":\"$2\"");

这是

正则表达式演示


注意

在字符组[a-zA-Z0-9-] ,我使用alphabetical digits和 a - ,也许您需要其他digits ,因此您可以使用另一个字符

此函数将添加引号并删除对象末尾的任何额外逗号

function normalizeJson(str){return str.replace(/"?([\w_\- ]+)"?\s*?:\s*?"?(.*?)"?\s*?([,}\]])/gsi, (str, index, item, end) => '"'+index.replace(/"/gsi, '').trim()+'":"'+item.replace(/"/gsi, '').trim()+'"'+end).replace(/,\s*?([}\]])/gsi, '$1');}

编辑:

这个其他函数支持 json 数组。

它还可以将单引号转换为双引号,并将引号与数字和布尔值分开。

function normalizeJson(str){
    return str.replace(/[\s\n\r\t]/gs, '').replace(/,([}\]])/gs, '$1')
    .replace(/([,{\[]|)(?:("|'|)([\w_\- ]+)\2:|)("|'|)(.*?)\4([,}\]])/gs, (str, start, q1, index, q2, item, end) => {
        item = item.replace(/"/gsi, '').trim();
        if(index){index = '"'+index.replace(/"/gsi, '').trim()+'"';}
        if(!item.match(/^[0-9]+(\.[0-9]+|)$/) && !['true','false'].includes(item)){item = '"'+item+'"';}
        if(index){return start+index+':'+item+end;}
        return start+item+end;
    });
}

我还使用安全正则表达式npm 模块测试了正则表达式

未加引号的 JSON 并不是真正有效的 JSON。 它只是 JavaScript。 如果您信任此字符串的来源:

var obj = eval("'({ 
time:  { 
      from:now-60d,
      mode:quick,
      to:now } 
 })'");

对于来自不受信任来源的字符串,建议这样做,因为它可能存在安全风险。

鉴于您从 Kibana 获取可能受信任的数据,评估字符串应该没问题。

另一种选择是使用其他答案可能详细说明的正则表达式。 或者,您可能希望修复 Kibana 导出以提供正确/有效的 JSON 字符串。

美好的一天伊德里斯

如果你想在所有有效的键名和值周围加上引号,也许看看这个表达式。 YCF_L 的回答完全符合您的要求。 但这里仍然如此。

{(?=[a-z])|[a-z](?=:)|:(?=[a-z])|[a-z](?=,)|,(?=[a-z])|[a-z](?=})
str.replace(/{(?=[a-z])|[a-z](?=:)|:(?=[a-z])|[a-z](?=,)|,(?=[a-z])|[a-z](?
=})/igm, $&");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM