2013-11-05 4 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 = str [i]'를하기 때문에'testcases = []'라는 지정은 무의미하다는 것에주의하십시오. ECMAScript에서 변수를 "입력"할 수 없습니다. – RobG

답변

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

네,하지만 원본 문자열에 메타 문자가 포함되어 있으면주의하십시오. – Pointy

+0

@Pointy 몇 가지 정밀도를 추가했습니다. – 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); 
} 
관련 문제