>  기사  >  웹 프론트엔드  >  JS 정규식에 대한 심층적인 이해---그룹화

JS 정규식에 대한 심층적인 이해---그룹화

高洛峰
高洛峰원래의
2017-01-20 13:45:23969검색

JS 정규식에 대한 심층적 이해 ---그룹

예전에 정규식 시작에 대한 글을 쓴 적이 있는데, 정규식에 대해 비교적 잘 이해하고 있다고 생각했는데 오늘 또 다른 내용을 접하게 되었습니다. 아마도 제가 충분히 주의하지 않았기 때문일 수도 있습니다. 오늘은 JavaScript 정규 표현식의 그룹화에 대해 집중적으로 설명하겠습니다. JS 정규식을 충분히 이해하지 못한다면 여기를 클릭하여 자세히 알아볼 수 있습니다.

그룹화는 정규식에서 널리 사용됩니다. 제가 이해하는 그룹화는 한 쌍의 괄호()입니다. 각 괄호 쌍은 그룹화를 나타냅니다.

•그룹화 캡처
•비캡처 그룹핑

캡처 그룹핑

캡처 그룹핑은 match exec 등의 함수에서 두 번째, 세 번째 항목 형태로 얻어지는 해당 그룹핑 결과입니다. 먼저 예제를 살펴보겠습니다.

var reg = /test(\d+)/;
 var str = 'new test001 test002';
 console.log(str.match(reg));//["test001", "001", index: 4, input: "new test001 test002"]

(d+) 코드에서 그룹(어떤 사람들은 하위 패턴이라고도 함)이지만 모두 같은 의미입니다. 위의 예 test001은 완전 일치 결과인데, 그룹 매칭은 전체 완전 ​​일치 결과(즉, test001)에서 하위 패턴 d+와 일치하는 문자를 찾는 것이므로 당연히 001이다. 그런데 오늘 접한 상황은 이렇다.

var reg = /test(\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));//["test001", "1", index: 4, input: "new test001 test002"]

차이점은 (d+)가 (d)+로 변경되었다는 점입니다. 전체 일치 결과는 여전히 test001이지만 첫 번째 그룹의 일치 결과는 다릅니다. 차이점을 천천히 분석해 보겠습니다

(d+) 이는 그룹화 상황입니다. 기본적으로 매칭 모드는 탐욕 모드이므로 가능한 한 많은 d+ 매칭 결과를 매칭한다는 의미입니다. 001이고 그 다음에는 괄호 한 쌍입니다. 그룹인 외부에 추가되므로 첫 번째 그룹의 일치 결과는 001입니다. 두 번째 예의 (d)+를 살펴보겠습니다. 이 역시 그리디 패턴입니다. 0으로 하면 1이 될 때까지 일치합니다. 일치가 끝날 때까지 일치합니다. 첫 번째 예의 일치와 별 차이가 없어 보이지만 여기서 그룹화(d)는 단일 숫자와 일치한다는 의미이며, 내 이전 이해에 따르면 0입니다. 그러나 이 이해는 잘못되었습니다. 전체 매칭은 그리디 모드이므로 그룹 내에서 최대한 많은 (d)를 매칭하면 마지막 매칭 결과를 캡쳐하게 된다 1. 비그리디 모드라면 최대한 적은 수의

var reg = /test(\d)+?/;
var str = 'new test001 test002';
console.log(str.match(reg));//["test001", "0", index: 4, input: "new test001 test002"]

를 매칭하게 된다. 가능

이렇게 하면 (d)의 일치 결과는 0이 됩니다. 나중에도 일치하는 결과가 있지만 최대한 일치하는 항목은 적습니다.

비캡처 그룹화

비캡처 그룹화는 어떤 위치에서는 한 쌍의 괄호가 필요하지만 캡처 그룹화가 되는 것을 원하지 않는다는 의미입니다. 즉, macth exec와 같은 함수로 이 그룹을 얻는 것을 원하지 않습니다. 보통 괄호 안 앞에 ?: 즉, (?:pattern)은 비캡처 그룹이 되며,

var reg = /test(?:\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));//["test001", index: 4, input: "new test001 test002"]

이런 식으로 일치하는 내용은 다음과 같습니다. 두 번째 항목이 누락되었습니다. 1.

이 기사에서는 오늘 If에 빠진 함정이기도 한 (d+)와 (d)+의 차이점에 중점을 둡니다. 틀린 부분이 있으니 바로잡아주세요.

위 글은 JS 정규 표현식에 대한 심층적인 이해를 제공합니다. 그룹화는 편집자가 공유하는 모든 내용을 참고할 수 있기를 바라며, PHP 중국어를 지원해 주시길 바랍니다. 웹사이트.

JS 정규식에 대한 더 깊은 이해를 원하시면---그룹화 관련 글은 PHP 중국어 홈페이지를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.