0

我正在努力寻找一种方法来获得变量的模式匹配。我曾尝试拆分事物并执行 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

我怎样才能让这个匹配?

4

2 回答 2

0

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

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

为了这:

if (currentExports.indexOf(badExportHosts[badHost]) < 0) {
于 2012-07-13T02:07:54.253 回答
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()实际上是在循环的每次迭代中尝试匹配字符串 "badExportHosts[badHosts]" for,这是不好的,因为您需要匹配badExportHosts数组中的值,而不是变量名本身。你需要一个像对象给你/badhost1.foo.com/g的正则表达式。RegExp

于 2012-07-13T02:20:54.730 回答