정규 표현 식 캡 처 그룹 깊이 분석

캡 처 그룹(capturing group)은 정규 표현 식 에서 자주 사용 되 고 중요 한 개념 입 니 다.저 는 개인 적 으로 이 부분의 지식 을 파악 하 는 것 이 매우 중요 하 다 고 생각 합 니 다.
이 글 은 내용 이 깊이 들 어가 지 는 않 지만 가능 한 한 간단 하고 이해 하기 쉬 우 며 전면적 이 어야 한다.다음 내용 은 주로 다음 과 같은 7 가지 점 을 중심 으로 한다.
1:()포획 조
2: (?:) non capturing group
3: (?=) positive lookahead
4: (?!) negative lookahead
5: (?<=) positive lookbehind
6: (?7: (?=), (?!), (?<=), (?1:()포획 조
/go+/
이상 의 정규 표현 식 은 하나의 자모 g 뒤에 하나 이상 의 자모 o 를 따 르 는 것 을 나타 내 는데 그 는 go 나 goooo 와 일치 할 수 있 습 니 다.그러나 우리 가+알파벳 o 만 사용 하 는 것 이 아니 라 go 라 는 전체 에 활용 하려 면 어떻게 해 야 합 니까?방법 은 바로 go 에 괄호 를 넣 는 것 이다.
/(go)+/
전역 일치 및 대소 문 자 를 고려 하지 않 기 위해 서,우 리 는 다음 에 우리 의 정규 에 ig 를 추가 할 것 입 니 다.이 두 flag:

let reg = /(go)+/ig;
'go is g gogo'.match(reg); //["go", "gogo"]
위의 예 에서(go)포획 그룹(capturing group)이 형성 되 었 다.다음은 포획 조 의 예 를 사용 하여 그것 에 대한 이 해 를 깊이 있 게 한다.

let reg = /(\d{2}).(\d{2}).(\d{4})/;
let originString = '10.25.2017';
reg.test(originString); //true
RegExp.$1; //10
RegExp.$2; //25
RegExp.$2; //2017
위의 예 에서 우 리 는 세 개의 괄호 가 있 고 세 개의 캡 처 그룹 을 만 들 었 습 니 다.정규 표현 식(javaScript 에서 우리 의 RegExp)은 캡 처 그룹 과 일치 하 는 문자열 을 캐 시 합 니 다.$n 으로 표시 하면 n 은 이 몇 번 째 캡 처 그룹 을 대표 합 니 다.
만약 지금 우리 가 필요 로 하 는 것 이 있다 면,디 스 플레이 형식 을 10.25.2017 로 바 꾸 는 시간 을 2017-10-25 형식 으로 바 꿉 니 다.
String 의 replace()방법 은 정규 표현 식 과 함께 자주 사용 되 는 것 을 알 고 있 습 니 다.replace()방법 에서 포획 조 의 결 과 를 직접 사용 할 수 있 습 니 다.

let reg = /(\d{2}).(\d{2}).(\d{4})/;
let originString = '10.25.2017';
let newString = originString.replace(reg, '$3-$1-$2');
console.log(newString);//"2017-10-25"
2: (?:) non capturing group 비 포획 형 그룹
때때로 우 리 는 그룹 만 일치 하고 싶 을 수도 있 지만,일치 하 는 결 과 를 캐 시 하고 싶 지 않 을 수도 있 습 니 다.그룹 모드 앞 에?:를 추가 할 수 있 습 니 다.예 를 들 어 위의 시간의 예 를 들 어 우 리 는 첫 번 째 그룹의 결 과 를 포착 하고 싶 지 않 으 면 이렇게 할 수 있다.

let reg = /(?:\d{2}).(\d{2}).(\d{4})/;
let originString = '10.25.2017';
reg.test(originString); //true
RegExp.$1; //25
RegExp.$2; //2017
originString.match(reg);// ["10.25.2017", "25", "2017", index: 0, input: "10.25.2017", groups: undefined]
위의 예 를 통 해 알 수 있 듯 이 우리 의 정규 표현 식 은 여전히 일치 하 는(test()결 과 는 여전히 true)입 니 다.그러나 RegExp.$1 은 숫자 10 이 아니 라 25 입 니 다.왜냐하면 우 리 는 첫 번 째 괄호 에 넣 었 기 때 문 입 니까?:10 은 잡 히 지 않 는 다.match()의 실행 결과 도 받 습 니까?:의 영향:match()의 결과 에는 더 이상'10'이 없습니다.
3: (?=) positive lookahead 정방 향 전망 형 포획
한 문장 이 있 습 니 다.1 apple costs 10.우 리 는 앞의 가격 과 일치 하고 싶 습 니 다.(여 기 는 숫자 입 니 다)그러나 문장의 시작 에 일치 하지 않 는 숫자 1 에 주의 하 십시오.이런 경우 정방 향 전망 형 포획 에 사용 할 수 있다.

let reg = /\d+(?=)/g;
let reg1 = /\d+/g;
let str = '1 apple costs 10';
str.match(reg); //["10"]
str.match(reg1); //["1", "10"]
위의 예 에서 reg 1 은 숫자 만 일치 하고 숫자 뒤에 무엇 을 요구 하지 않 기 때문에 1,10 까지 일치 할 수 있 습 니 다.그러나 reg 는 전망 형 매 칭 을 사용 하여 10 까지 만 매 칭 할 수 있 습 니 다.
아마도 당신 은 위의 대비 에서 무엇이 정방 향 전망 형 포획 인지 알 수 있 을 것 입 니 다.뜻 은:
/x(?=y)/x 와 일치 하지만 x 의[뒤에][예]y 의 경우
4: (?!) negative lookahead 마이너스 전망 형 캡 처
위 에서 우 리 는 무엇이 정방 향 전망 형 일치 하 는 지 알 게 되 었 고 글자 의 의미 에서 도 마이너스 전망 형 포획 은 다음 과 같다.
/x(?!y)/매 칭 x,하지만 x 의[뒤에][아니]y 의 경우
예 를 들 어 아래 의 예 를 들 어 우 리 는 앞의 2 가 아 닌 숫자 1 과 일치 해 야 합 니 다.사용 할 수 있 습 니까?!

let reg = /\d+(?!)/g;
let str = '1 apple costs 2';
str.match(reg); ['1']
5: (?<=) positive lookbehind 정방 향 후방 형 포획
회고 형 과 전망 형 은 정반 대 이다.
/(?<=y)x/매 칭 x,하지만[앞][있 음]y 의 경우 에 만
예 를 들 어 보 겠 습 니 다.

let str = "1 turkey costs $2";
console.log( str.match(/(?<=\$)\d+/g) ); //["2"]
여기 서 요구 하 는 것 은 앞 에$의 숫자 가 있 기 때문에 여 기 는 숫자 2 와 일치 합 니 다.1 이 없습니다.
6: (?마이너스 방향 은 플러스 와 반대 되 는 것 이다.그러면 마이너스 방향 후 고 형 포획 은:
/(?<=y)x/매 칭 x,하지만[앞][없 음]y 의 경우 에 만
예 를 들 어 보 겠 습 니 다.

let str = "1 turkey costs $2";
console.log( str.match(/(?<!\$)\d+/g) ); //['1']
7: (?=), (?!), (?<=), (?기본 적 인 상황 에서 위의 전망 4 가 지 는 캡 처 그룹의 내용 과 일치 하지 않 습 니 다.즉,괄호 안의 조건 과 일치 하지 않 습 니 다.예 를 들 어 우리 의 정방 향 전망/d+(?=)/g,숫자 만 일치 하고 일치 하지 않 습 니 다.우리 도 맞 추 려 면 어 떡 하지?정 답 은 괄호 를 넣 는 것 이다.

let str = "1 turkey costs 2";
let reg = /\d+(?=())/; 
str.match(reg); //["2", "", index: 15, input: "1 turkey costs 2", groups: undefined]
이렇게 하면 숫자 2 와 그 뒤의 것 이 일치 합 니 다.
다음은 후 고 형 을 살 펴 보 자.

let str = "1 turkey costs $2";
let reg = /(?<=(\$|£))\d+/;
console.log( str.match(reg) ); //["2", "$", index: 16, input: "1 turkey costs $2", groups: undefined]
특히 주의해 야 할 것 은 후 고 형 에 대해 서 는 조건 이 일치 하 는 항목 의 앞 에 있 지만 일치 하 는 결과 순 서 는 여전히 조건 이 일치 하 는 항목 의 뒤에 있다 는 것 이다.그래서 여기 match()에서 나 온 결 과 는 2 달러 앞 에 있 습 니 다.
총결산
위 에서 말 한 것 은 소 편 이 소개 한 정규 표현 식 포획 팀 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기