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/gRegExp

于 2012-07-13T02:20:54.730 に答える