gpt4 book ai didi

javascript - 改进我可怕的 switch 正则表达式匹配语句

转载 作者:搜寻专家 更新时间:2023-11-01 00:14:57 25 4
gpt4 key购买 nike

我正试图避免在 node.js 中使用可怕的 switch 案例。我正在寻找一种更有效的方法来测试针对各种正则表达式情况的输入。根据匹配的情况,我要么触发一个事件,要么在运行另一个函数之前对输入进行一些转换。

为了节省非常长的代码块,我将我的函数缩减为下面的框架,以便它显示对开关的关注。

我已经了解了使用 .map 返回 true false 的可能性,但我也不确定如何最好地实现它。

关于执行此操作的最佳方法有什么意见或建议吗?

function ParseLogMessages(message, config, callback){
var _this = this;

try {
//Define regex in order to match strings based on case
_this.to_group = new RegExp("^\\[\\d{2}:\\d{2}\\]\\s+\\w+\\s+tg+\\s\\>{3}");
_this.from_group=new RegExp("^\\[\\d\\d:\\d\\d\\]\\s\\w+\\s\\w+\\s\\>{3}");
_this.to_person = new RegExp("^\\[\\d{2}:\\d{2}\\]\\s[a-zA-Z0-9 \\- _]+\\s\\<{3}.+");
_this.from_person = new RegExp("^\\[\\d{2}:\\d{2}\\]\\s\\w+\\s\\>{3}");
_this.contact = new RegExp("(User #+\\d+:)");


_this.contact = new RegExp("(User #+\\d+:)");

//Test message against each to find type
switch (true){
//Message sent to a group chat
case _this.to_group.test(_this.payload.raw):
break;

//Message from a group chat
case _this.from_group.test(_this.payload.raw):
break;

//Message sent to a person from the bot
case _this.to_person.test(_this.payload.raw):
break;

//Message sent from a person to the bot
case _this.from_person.test(_this.payload.raw):
break;

//Contact shared
case _this.contact.test(_this.payload.raw):
break;

default:
break;


}

callback(null,"Logfile message parsed ok!");

} catch(err) {
log.error(err);
return callback(err,null);
}

}

最佳答案

您可以创建一个正则表达式/函数对数组并遍历该数组:

_this.tests = [
{ regex: new RegExp("^\\[\\d{2}:\\d{2}\\]\\s+\\w+\\s+tg+\\s\\>{3}"), // to_group
action: ... // action for to_group
},
{ regex : new RegExp("^\\[\\d\\d:\\d\\d\\]\\s\\w+\\s\\w+\\s\\>{3}"), // from_group
action: ... // action for from_group
},
// etc.
];

然后就可以循环遍历数组,测试,测试成功了就断:

for (i=0; i<tests.length; ++i) {
if (tests[i].regex.test(_this.payload.raw) {
tests[i].action();
break;
}
}

关于javascript - 改进我可怕的 switch 正则表达式匹配语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27917523/

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