2017-01-14 1 views
0

반복 ({}) 내에 캡처 된 그룹/역 참조를 사용하고 싶습니다. 이것은 역 참조가 반복되는 것이 숫자 대신 따옴표 안에있는 숫자이기 때문에 이것은 효과가 없을 것입니다. 따옴표를 벗어나는 방법이 있습니까?자바 스크립트 정규 표현식 그룹 반복

명확한 예 : 문자열은 "B 2 zzzzz"입니다. 나는 오직 하나의 정규식을 정의함으로써 'zz'를 포착하고 싶다. 내가 시도한 것은 :

'B 2 zzzz'.match(/B (\d)+ (z{\1})/) 

아무 것도 반환하지 않습니다. 다음

'B 2 zzzz'.match(/B (\d)+ (z{2})/) 

도 작동합니다. 그래서 나는 \ 1 역 참조가 2 대신에 "2"라고 추측합니다. 이것을 피할 수있는 방법이 있습니까? 또는 정규 표현식에 정의하지 않고이 작업을 수행하는 또 다른 방법은 무엇입니까?

:

내가 하나의 정규식 함께 할 수있는 방법을 볼 수 없습니다

답변

1

, 여기, 첫 번째 두 번째 사용에게 새로운 정규식을 구축하기 위해이 값을 숫자를 데리러 2 정규식을 사용하는 방법입니다

str = 'B 3 zzzzz'; 
 
num = str.match('B (\\d+) z+'); 
 
re = new RegExp('B \\d+ (z{' + num[1] + '})'); 
 
z = str.match(re); 
 
console.log('z = '+z[1]);

또 다른 방법 :

str = 'B 3 zzzz'; 
 
num = str.match('B (\\d+) (z+)'); 
 
if (num[2].length >= num[1]) { 
 
    z = num[2].substr(0, num[1]); 
 
    console.log('z = ' + z); 
 
} else { 
 
    console.log('No match'); 
 
}