为什么“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++;
}
}
答案 0 :(得分:2)
您需要定义一个实际的RegExp
对象。
new RegExp(testcases, 'g');
但是请注意,如果您的字符串包含需要以正则表达式模式进行转义的字符,则可能会导致意外结果。
E.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
答案 1 :(得分:1)
match()
方法只需要一个参数 - 一个regexp对象。要像您尝试使用RegExp
构造函数一样从字符串构造正则表达式:
testcases = new RegExp(str[i],'g');
然后你可以这样做:
if (str.match(testcases).length >= 2) {
console.log(testcases);
}