簡體   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