与变量匹配的Javascript模式

Javascript pattern matching a variable

本文关键字:Javascript 模式 变量      更新时间:2023-09-26

我正在努力寻找一种方法来获得变量的模式匹配。我尝试过拆分事物,做indexOf,使用match和switch(true)语句,但都没有成功。任何帮助都将不胜感激!

currentExports = 'sec=sys,rw=badhost1.foo.com:badhost2.foo.com,root=badhost1.foo.com:badhost2.foo.com';
badExportHosts = params.badExportHosts.split(':');
for (badHost = 0; badHost < badExportHosts.length; badHost++) {
    if (!currentExports.match(/badExportHosts[badHost]/g)) {
        printf('Entry ' + badExportHosts[badHost] + ' was not found in ' + currentExports + ''n');
    } else {
        printf('Entry ' + badExportHosts[badHost] + ' was found in ' + currentExports + ''n');
    }

如果我在表格中输入:

badhost1.foo.com:badhost2.foo.com

不幸的是,我得到了这样的结果:

Entry badhost1.foo.com was not found in sec=sys,rw=badhost1.foo.com:badhost2.foo.com,root=badhost1.foo.com:badhost2.foo.com
Entry badhost2.foo.com was not found in sec=sys,rw=badhost1.foo.com:badhost2.foo.com,root=badhost1.foo.com:badhost2.foo.com

我该如何匹配?

我认为你在这里的意图似乎不够清楚,但是,如果我理解正确,并且你只想检查你的"badHost"字符串是否包含在currentExports上的任何位置,你可以尝试替换它:

if (!currentExports.match(/badExportHosts[badHost]/g)) {

为此:

if (currentExports.indexOf(badExportHosts[badHost]) < 0) {

你走在了正确的轨道上。尝试使用RegExp对象,如下所示:

var pattern;
currentExports = //your same code goes here
//...
for(badHost = 0; badHost < badExportHosts.length; badHost++){
    pattern = new RegExp(badExportHosts[badHost], 'g');
    if (!currentExports.match(pattern)) {
        //your print statments go here
    }
}

问题是,您对match()的调用实际上是试图在for循环的每次迭代中匹配字符串"badExportHosts[badHosts]",这是不好的,因为您需要匹配badExportHosts数组中的值,而不是变量名本身。您需要一个类似/badhost1.foo.com/g的正则表达式,RegExp对象会为您提供该正则表达式。