为什么“ 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/

最佳答案

您需要定义一个实际的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

10-07 15:59