[英]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.