0

このインスタンスで "g" 修飾子が機能しないのはなぜですか? 変数をコンマで区切り、「g」を追加することは、一致をグローバル一致に設定するための許容できる方法だと思いましたか?

str = "cabeca";
testcases = [];
x = 0;
for (i = 0; i < str.length; i++) {
testcases = str[i];
    x = i + 1;
    while (x < str.length) {
            testcases += "" + str[x];
            if (str.match((testcases),"g").length >= 2) {
            console.log(testcases);
            }
        x++;
    }
}

現在のデモ (まだ動作していません) http://jsfiddle.net/zackarylundquist/NPzfH/

4

2 に答える 2

2

RegExp実際のオブジェクトを定義する必要があります。

new RegExp(testcases, 'g');

ただし、文字列に正規表現パターンでエスケープする必要がある文字が含まれている場合、予期しない結果になる可能性があることに注意してください。

例えば

var s = 'test.',
    rx = new RegExp(s);

rx.test('test1'); //true, because . matches almost anything

したがって、入力文字列でエスケープする必要があります。

rx = new RegExp(s.replace(/\./, '\\.'));

rx.test('test1'); //false
rx.test('test.'); //true
于 2013-11-05T01:43:22.663 に答える
1

このmatch()メソッドは、1 つの引数 (正規表現オブジェクト) のみを想定しています。コンストラクタを使用しようとしているように、文字列から正規表現を構築するにはRegExp:

testcases = new RegExp(str[i],'g');

次に、次のことができます。

if (str.match(testcases).length >= 2) {
    console.log(testcases);
}
于 2013-11-05T01:43:39.713 に答える