2014-06-04 3 views
1

"http://test.com/1/2"에 "1"과 "2"를 캡처하고 싶습니다. 여기 내 정규식 /(?:\/([0-9]+))/g입니다. 문제는 단지 ["/1", "/2"]입니다. http://regex101.com/r/uC2bW5에 따르면 나는 "1"과 "1"을 얻어야합니다.캡쳐 그룹에서 RegExp 캡쳐 그룹

JS에서 RegExp를 실행하고 있습니다.

+0

그래서 JS에서 어떻게 사용하고 있습니까? 나는 당신이'match'를 잘못 사용하고있는 것으로 의심합니다 ... – elclanrs

+3

여기, 이것을 사용하십시오 https://gist.github.com/elclanrs/5506663 – elclanrs

+0

큰 기능 @elclanrs – Sam

답변

0

자바 스크립트에서 "일치"는 항상 WHOLE 패턴 일치를 포함하는 0 색인의 요소를 포함합니다. 따라서 귀하의 경우,이 색인 0은 두 번째 경기의 경우 /1/2입니다.

처음으로 Matchgroup (/을 포함하지 않음)을 얻으려면 인덱스가 1 인 Match-Array 항목 안에 있습니다.

이 인덱스 0을 제거하고 ?:

은 자바 스크립트가 괄호의 추가 세트로 전체 정규 표현식을 wrapps 상상을 사용하여 당신이 non-matching로 정의 외부 매칭 그룹과 아무 상관이 될 수 없다.

e.e. 당신은 몇 가지 옵션이

[0 => Hello World, 1 => o] 
1

:에있는 문자열 Hello World과 정규식 /Hell(o) World/가 발생합니다

  1. 가 사용을 while 루프 RegExp.prototype.exec 이상 : 같은

    var regex = /(?:\/([0-9]+))/g, 
        string = "http://test.com/1/2", 
        matches = []; 
    
    while (match = regex.exec(string)) { 
        matches.push(match[1]); 
    } 
    
  2. 사용 replaceelclanrs에 의해 제안 :

    var regex = /(?:\/([0-9]+))/g, 
        string = "http://test.com/1/2", 
        matches = []; 
    
    string.replace(regex, function() { 
        matches.push(arguments[1]); 
    }); 
    
+0

일치하는 그룹 전체를 반환 할 것이라고 생각했습니다. while 루프를 사용하여 아웃. – bozhidarc