2012-07-15 2 views
2

정규 표현식의 배열을 사용하고 'exec'연산을 사용하여 배열을 반복 할 수 있습니까?자바에서 정규 표현식 배열을 반복합니다.

for(i=0;i<arrRegex.length;i++){ 
    arrRegex[i].exec(somestring); 
} 

것은 이것이 작동하는 것 같다하지 않는다는 것입니다 :

var arrRegex = new Array(/(http:\/\/(?:.*)\/)/g, /(http:\/\/(?:.*)\/)/g); 

지금 내가 만든 루프에 대한이 작업을 수행 :이 같은 다양한 정규 표현식 배열을 초기화했다. 나는 이런 식으로 하드 코딩 사용하지 않으 :

(/(http:\/\/(?:.*)\/)/g).exec(somestring); 

배열 옵션을 사용하여 '.exec'기능은 널 (null)를 반환합니다. 하드 코딩 된 옵션을 사용하면 원하는대로 일치 항목을 반환합니다.

+0

exec는 일치하는 내용을 반환하지 않지만 하드 코딩 된 내용은 반환합니다. matches = null –

답변

2

exec()은 일치를 반환하므로 캡처 할 수 있어야합니다.

somestring = 'http://stackoverflow.com/questions/11491489/iterate-through-regular-expression-array-in-javascript'; 
var arrRegex = new Array(/(http:\/\/(?:.*)\/)/g, /(http:\/\/(?:.*)\/)/g); 
for (i = 0; i < arrRegex.length; i++) { 
    match = arrRegex[i].exec(somestring); 
} 

match

는 다음과 같은 구조로 배열이다 :
{ 
    [0] = 'string matched by the regex' 
    [1] = 'match from the first capturing group' 
    [2] = 'match from the second capturing group' 
    ... and so on 
} 

당신은 또한 exec() != null을위한 속기로 test() 대신 exec()를 사용할 수있는이 jsFiddle http://jsfiddle.net/HHKs2/1/

에서 살펴 보자. test()은 정규 표현식이 문자열의 일부와 일치하는지 여부에 따라 부울 변수를 반환합니다. BTW

for(i=0;i<arrRegex.length;i++){ 
    var someotherstring = arrRegex[i].exec(somestring)[1]; 
    // do something with it ... 
} 

:

+0

알다시피, 하드 코딩 된 경우에는 아름답게 작동하지만 코드에 쓴 것처럼 정규식을 사용하면 null을 반환합니다. 크롬 브라우저에서 사용합니다. –

+0

게시 한 jsFiddle 링크를 살펴보십시오. 배열 방식을 사용하고 결과를 반환합니다. 또는 문자열에서 표현식을 초기화하는 것에 대해 언급하고 있습니까? Btw,'exec()! = null'의 줄임말로'exec()'대신'test()'를 사용할 수도 있습니다. 'test()'는 정규 표현식이 문자열의 일부와 일치하는지 아닌지에 따라 부울 변수를 반환합니다. – Dreen

+0

만약 당신이 말하는 말이 맞다면, 여기에있는 테스트가 어떻게 false를 반환할까요? http://jsfiddle.net/IdanShechter/uLMBL/ –

1

은 당신이 아마하고 싶은 첫 번째 그룹을 캡처하는 것입니다 즉, 내 생각 엔, 당신이 뭘 하려는지 확실하지 않다. 그러나 URL의 호스트 이름을 얻으려고한다면 /(http:\/\/(?:.?)\/)/g을 사용해야합니다. .* 뒤에 물음표가 있으면 앞의 한정 기호 (*)가 유창합니다.

+0

test() 함수가 false를 반환하는 이유는 일치하는 http : //가 있기 때문에 true를 반환해야한다는 것입니다. /jsfiddle.net/IdanShechter/uLMBL/ –

+0

음, 코드가 Chrome에서 작동합니다. 'exec()'결과의 왼손 할당과 같이 좀 더 많은 컨텍스트를 제공 할 수 있습니까? 또는 실제 작업중인 관련 코드를 제공 할 수도 있습니다. –