簡體   English   中英

帶有變量的Javascript正則表達式提取

[英]Javascript regex extract with variable

我想從下面的key:value對中提取值作為單個字符串發送:

"var1:value1,var2:value2,var3:value3"

我必須使用JavaScript,但由於正則表達式無法處理變量,因此我無法使用數組並遍歷var1,var2,var3鍵...我想知道是否有辦法在JS中做到這一點?

見下文:

function onBefore(current, previous) 
{
if (current.key != '' || current.key != null) 
{
    if (current.key.match(/var1/)) {
    var assign = current.key.match(/(?:var1:)([^,]+)/)[1];
    } else if (current.key.match(/var2/)) {
    var assign = current.key.match(/(?:var2:)([^,]+)/)[1];
    } else if (current.key.match(/var3/)) {
    var assign = current.key.match(/(?:var3:)([^,]+)/)[1];
    } else if (current.key.match(/var4/)) {
    var assign = current.key.match(/(?:var4:)([^,]+)/)[1];
    }
    } else {
        assign = "None";
    }
    if (assign != "None") {
    current.node = assign;
    }
}
}

@revo感謝您的回答,其他人也可以從中受益...這是最終代碼:

  var str = "keyIcareabout:test3end,something:value,nothing:burger"; var node = "None"; function valueOf(key) { return (m = (new RegExp("\\\\b" + key + ":([^,]+)")).exec(str)) !== null ? m[1] : null; } if (str != '' || str !== null) { var resources = ["keyIcareabout","somethingelseIcareabout"]; for (i = 0; i < resources.length; i++) { if (str.match(resources[i])) { node = valueOf(resources[i]); } } } if (node != "None") { console.log("Matched " + node + " with node field "); } 

使用String.split

 const data = 'var1:value1,var2:value2,var3:value3'; const pairStrings = data.split(/,/g); const pairs = pairStrings.map(pairString => pairString.split(/:/)); const object = pairs.reduce((object, [key, value]) => { object[key] = value; return object; }, {}); console.log(object); 

您低估了正則表達式。 您的整個功能可以簡化為:

function valueOf(key) {
   return (m = (new RegExp("\\b" + key + ":([^,]+)")).exec(str)) !== null ? m[1] : null;
}

您無需在if條件下單獨檢查每個鍵。 key傳遞給上述valueOf()函數以檢索該值。

 var str = "aws_acnt_name:test,aws_acnt_num:1234," + "host:identity01.auth-test,region:us-west-2,snow_sg:aws_cloud"; function valueOf(key) { return (m = (new RegExp("\\\\b" + key + ":([^,]+)")).exec(str)) !== null ? m[1] : null; } console.log(valueOf('host')); console.log(valueOf('aws_acnt_name')); 

您可以使用正則表達式RegExp.exec()遍歷鍵/值對的匹配,並將鍵和值提取到對象(或數組):

 var str = 'var1:value1,var2:value2,var3:value3'; var pattern = /([^:,]+):([^,]+)/g; var obj = {}; var temp; while(temp = pattern.exec(str)) { obj[temp[1]] = temp[2]; } console.log(obj); 

編輯-根據vasan的建議刪除我的答案,我們需要在鍵和值兩邊加上引號。 與其添加引號然后進行解析,不如使用split函數將其拆分會更好。 因此,SimpleJ的答案應該有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM