gpt4 book ai didi

regex - 减少解析时的代码重复

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:03 25 4
gpt4 key购买 nike

我希望代码库中的重复代码尽可能少,因此我一直在寻找减少重复代码的方法。

然而,我对以下情况有点困惑:假设我有一种方法,可以将一个程序的输出解析为一个对象,以使其在另一个程序中可读。

我当前的方法是使用正则表达式扫描输入以形成新的输出对象。

这会创建一长串 if 语句,这些语句看起来或多或少相同,但各处略有不同。有没有一种有意义的方法可以减少这里的代码重复,或者这是我必须忍受的事情?

if ((match = block.match(/bssid=([A-Fa-f0-9:]{17})/))) {
parsed.bssid = match[1].toLowerCase();
}

if ((match = block.match(/freq=([0-9]+)/))) {
parsed.frequency = parseInt(match[1], 10);
}

if ((match = block.match(/mode=([^\s]+)/))) {
parsed.mode = match[1];
}

if ((match = block.match(/key_mgmt=([^\s]+)/))) {
parsed.key_mgmt = match[1].toLowerCase();
}

最佳答案

我猜你想要这样的东西:

var parseConfig = {
bssid: {
expr: /bssid=([A-Fa-f0-9:]{17})/,
handle: match => match[1].toLowerCase()
},
frequency: {
expr: /freq=([0-9]+)/,
handle: match => parseInt(match[1], 10)
},
mode: {
expr: /mode=([^\s]+)/,
handle: match => match[1]
},
key_mgmt: {
expr: /key_mgmt=([^\s]+)/,
handle: match => match[1].toLowerCase()
}
};

function parse(block, cfg) {
var parsed = {};

Object.keys(cfg).forEach(key => {
var item = cfg[key],
match = block.match(item.expr);

parsed[key] = match ? item.handle(match) : null;
});

return parsed;
}

关于regex - 减少解析时的代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37920622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com