나는 전에 정규 표현을 시작하는 것에 관한 기사를 썼습니다. 나는 정규 표현에 비교적 익숙하다고 생각했지만 오늘은 또 다른 함정을 만났습니다. 어쩌면 내가 충분히 조심하지 않았기 때문일 수도 있습니다. 오늘 저는 JavaScript 정규 표현식으로 그룹화를 공유하는 데 중점을 둘 것입니다. JS 정규 표현식을 충분히 이해하지 못하면 여기를 클릭하여 자세한 내용을 알 수 있습니다.
그룹화는 정기적 인 규칙에서 상당히 널리 사용됩니다. 내가 이해하는 그룹화는 한 쌍의 괄호 ()이며 각 괄호 한 쌍은 그룹을 나타냅니다.
그룹화는 다음과 같이 나눌 수 있습니다.
캡처 그룹화는 일치 exec와 같은 함수에서 제 2 항의 형태로 해당 그룹화의 결과를 얻습니다. 먼저 예를 살펴 보겠습니다
var reg =/test (/d+)/; var str = 'new test001 test002'; console.log (str.match (reg)); // [ "test001", "001", index : 4, 입력 : "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, 입력 : "New Test001 Test002"]]]
차이점은 (/d+)가 (/d)+로 변경되고 전체 일치 결과는 여전히 Test001이지만 첫 번째 그룹 일치의 결과는 다르다는 것입니다.
그들의 차이점을 살펴 보겠습니다
(/d+) 이것은 기본적으로 일치하는 패턴이 탐욕스러운 패턴, 즉 가능한 많은 일치하기 때문에 그룹화 상황입니다.
모든 /d+ 일치의 결과는 001입니다. 그러면 한 쌍의 괄호가 외부에 추가되므로 그룹을 의미하므로 첫 번째 그룹의 일치 결과는 001입니다.
두 번째 예에서 (/d)+를 살펴 보겠습니다. 이것은 또한 탐욕스러운 패턴입니다. 먼저, 먼저 0과 0과 일치하고 1의 끝과 일치합니다.
첫 번째 예제에서는 경기와 차이가 없지만 여기에서 그룹화 (/d)는 단일 숫자와 일치하는 것을 의미합니다.
이전의 이해에 따르면, 처음에는 경기가 0이라는 결과는 0이지만이 이해는 잘못되었습니다. 전체 경기는 탐욕스러운 패턴이므로 가능한 한 많이 일치하십시오.
(/d) 그룹에서 마지막으로 일치하는 결과를 캡처합니다 1
비 게리 패턴이라면 가능한 한 적게 일치합니다.
var reg =/test (/d)+?/; var str = 'new test001 test002'; console.log (str.match (reg)); // [ "test001", "0", index : 4, 입력 : "New Test001 Test002"]]]]
이런 식으로 일치하는 결과 (/d)는 0입니다. 나중에 일치 할 수있는 결과가 여전히 있지만 여기에는 가능한 한 적은 일치가 있습니다.
비과전 그룹화
var reg =/test (? :/d)+/; var str = 'new test001 test002'; console.log (str.match (reg)); // [ "test001", index : 4, 입력 : "New Test001 Test002"]
캡처되지 않은 그룹화는 일부 장소에서 한 쌍의 괄호가 필요하다는 것을 의미하지만 캡처 그룹이되기를 원하지 않으므로 Macth Exec와 같은 기능 으로이 그룹을 얻지 않기를 바랍니다.
일반적으로 괄호 안에있는? : (? : Pattern)는 캡처 그룹이됩니다.
이런 식으로 경기의 경기 결과에는 컨텐츠가 일치하지 않으므로 두 번째 항목이 누락되었음을 의미합니다.
이 기사는 (/d+)와 (/d)+의 차이점을 설명하는 데 중점을두고 있으며, 이는 오늘 제가 밟은 구덩이이기도합니다. 실수가 있으면 자유롭게 수정하십시오.