Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配变量的Javascript模式_Javascript_Design Patterns_Matching - Fatal编程技术网

匹配变量的Javascript模式

匹配变量的Javascript模式,javascript,design-patterns,matching,Javascript,Design Patterns,Matching,我正在努力找到一种方法来获得一个变量的模式匹配。我尝试过拆分东西,使用match和switch(true)语句执行indexOf,但都没有成功。任何帮助都将不胜感激 currentExports = 'sec=sys,rw=badhost1.foo.com:badhost2.foo.com,root=badhost1.foo.com:badhost2.foo.com'; badExportHosts = params.badExportHosts.split(':'); for (badHost

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

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');
    }
不幸的是,我得到了这样的结果:

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) {
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
    }
}
var模式;
currentExports=//您的代码在这里
//...
对于(badHost=0;badHost

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

谢谢-这是有效的,不确定我做错了什么我第一次尝试indexOf,但它没有正确匹配。我将返回我的主代码,看看是否还有其他问题。很好,这也很有效。首先我看到了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
    }
}