2013-11-05 52 views
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/

+1

''var''var''var''var' var''var' – Pointy

+0

請注意,'testcases = []'這個賦值是沒有意義的,因爲在你做任何事情之前,你先用'testcases *'做'testcases = str [i]'。你不能在ECMAScript中「輸入」變量。 – RobG

回答

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 
+0

是的,但要小心原始字符串應包含元字符。 – Pointy

+0

@積分我添加了一些精度。 – plalx

+0

添加上面的代碼是返回{}的結果,而不是它應該匹配的字母。 jsfiddle:http://jsfiddle.net/zackarylundquist/NPzfH/ –

1

match()方法只需要一個參數 - 一個正則表達式對象。從字符串構造一個正則表達式就像你正在試圖做的使用RegExp構造:

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

然後,你可以這樣做:

if (str.match(testcases).length >= 2) { 
    console.log(testcases); 
} 
相關問題