이전에 정규식 시작에 대한 기사를 쓴 적이 있습니다. 정규식에 대해 비교적 잘 이해하고 있다고 생각했는데, 오늘은 제가 충분히 주의하지 않았기 때문일 수도 있습니다. 정규 표현식으로 그룹화합니다. JS 정규식을 충분히 이해하지 못한다면 여기를 클릭하여 자세히 알아볼 수 있습니다.
그룹화는 정규식에서 널리 사용됩니다. 제가 이해하는 그룹화는 한 쌍의 괄호()입니다. 각 괄호 쌍은
그룹화를 나타냅니다. >
Capturing groupingNon-capturing groupingCapturing groupingvar 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인데, 첫 번째 그룹 매칭 결과가 다릅니다.
을 캡쳐하게 됩니다. 모드를 사용하면 가능한 한 적은
var reg = /test(\d)+?/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", "0", index: 4, input: "new test001 test002"]
var reg = /test(?:\d)+/; var str = 'new test001 test002'; console.log(str.match(reg)); //["test001", index: 4, input: "new test001 test002"]비캡처 그룹화는 어떤 곳에서는 괄호 쌍을 사용해야 하지만 원하지 않는다는 의미입니다. macth exec 대개 괄호 앞에 ?:를 추가합니다. 즉, (?:pattern)은 비캡처 그룹이 됩니다. ,
이렇게 하면 그룹화된 일치 내용이 일치 결과에 나타나지 않습니다. 즉, 두 번째 항목 1이 누락됩니다. 이 기사에서는 (d+)와 (d+)의 차이점에 중점을 둡니다. (d)+. 이것도 제가 오늘 밟은 함정입니다. 혹시 틀린 부분이 있으면 바로잡아주세요. 자바스크립트 정규식 그룹핑에 대한 자세한 설명과 관련 글은 PHP 중국어 홈페이지를 참고해주세요!