>웹 프론트엔드 >JS 튜토리얼 >정규식 그룹화에 대한 자세한 설명(코드 포함)

정규식 그룹화에 대한 자세한 설명(코드 포함)

php中世界最好的语言
php中世界最好的语言원래의
2018-03-30 11:39:342039검색

이번에는 정규식그룹핑(코드 포함)에 대한 자세한 설명을 들고 왔는데, 정규식 그룹핑의 주의사항은 무엇이며, 다음은 실제 사례이므로 살펴보겠습니다.

정규식 그룹화:
3개의 숫자를 일치시키려면 정규식을 다음과 같이 작성할 수 있습니다.

d{3}d{3}

以上代码使用重复量词可以匹配3位数字。
但是在实际应用中,往往需要重复多个字符,例如我想重复ab两个字符,使用以下代码就不合适了,代码如下:

ab{3}

以上正则表达式只能够重复3次b。
为了实现重复多个字符可以使用小括号来指定子表达式或者说分组来实现此功能,例如:

(ab){3}

上面的正则就可以重复ab了。
所谓的分组就是使用小括号将一些项包括起来,使其成为独立的逻辑域,那么就可以像处理一个独立单元一样去处理小括号的内容。

下面看一段代码实例:

(d{1,3}.){3}d{1,3}

上面是一个简单的ip匹配正则表达式。由小括号包裹的内容会被作为一个独立的逻辑域进行操作。
分组的作用:
在正则表达式中,分组具有举足轻重的作用,下面就简单对它的功能做一下简单的介绍。

一.起到原始的分组作用:

把单独的项目进行分组,以便合成子表达式,这样就可以像处理一个单独的字符那样,对其应用|、+、*或者?等元字符来操作它们。
实例代码如下:

var str="I love javascript and java";
console.log(str.match(/java(script)?/gi));

由以上代码的运行结果可以看出,正则表达式既可以匹配字符串javascript也可以匹配java,这是因在正则表达式中采用了分组,并且使用重复量词?,可以使前面的子表达式重复0次或者1次。

二.定义子模式:

分组另一个非常重要的作用就是在完整的模式中定义子模式。
当一个正则表达式成功的和目标字符串相匹配时,可以从目标字符串中抽出和小括号中字表达式相匹配的部分。
假如我们匹配的是以一个数字开头的后面跟着一个或者多个不区分大小写的字母的字符串,正则表达式可以这样写:

/d[a-zA-Z]+/

假如我们真正关心和需要的是开头的数字,那么就可以将正则表达式的数字部分放入小括号就可以从检索到的匹配中抽取数字.

/(d)[a-zA-Z]+/

三.引用子表达式:
正则表达语法中可以在同一个表达式中的后部引用前面的子表达式。这是通过在""后面跟随数字实现的。此数字指定了小括号字表达式在正则表达式中的位置,例如1是引用的第一个带有圆括号的子表达式,自然2就是第二个带有圆括号的子表达式。
特别注意:由于子表达式是可以相互嵌套的,那么计算子表达式的位置的时候,只要确定左括号的位置即可。例如:

/(java(script))/

在以上正则表达式中,嵌套的子表示是可以用2表示。
对于子表达式的引用,并不是引用的匹配模式,而是对子表示匹配内容的引用。一般来说对子表达式的引用一般是用来实施一条约束,看下面的代码:

/(['"])[^'"]*1/

위 코드는 반복을 사용하여 3개의 숫자를 일치시킬 수 있습니다. 수량자 .

그러나 실제 응용에서는 여러 문자를 반복해야 하는 경우가 많습니다. 예를 들어 ab 두 문자를 반복하려는 경우 다음 코드를 사용하는 것은 적절하지 않습니다.

ab{ 3}

위 정규식은 3번만 반복할 수 있습니다. b. 🎜여러 문자를 반복하려면 괄호를 사용하여 하위 표현식이나 그룹을 지정하여 이 기능을 수행할 수 있습니다. 예: 🎜🎜(ab){3}🎜🎜위의 정규식은 ab를 반복할 수 있습니다. 🎜소위 그룹화는 괄호를 사용하여 일부 항목을 포함하여 독립적인 논리적 도메인으로 만드는 것입니다. 그런 다음 괄호의 내용을 독립적인 단위처럼 처리할 수 있습니다. 🎜🎜🎜아래 코드 예시를 보세요: 🎜🎜🎜(d{1,3}.){3}d{1,3}🎜🎜위는 정규식과 일치하는 간단한 IP입니다. 괄호로 묶인 내용은 독립적인 논리 필드로 동작합니다. 🎜🎜그룹화의 역할:🎜🎜정규 표현식에서 그룹화는 중요한 역할을 합니다. 다음은 그 기능에 대한 간략한 소개입니다. 🎜🎜🎜1. 원래 그룹화 역할 수행: 🎜🎜🎜개별 항목을 그룹화하여 단일 문자를 처리하는 것처럼 |, +, * 또는 ? 등을 적용할 수 있습니다. http://www.php.cn/code/10419.html" target="_blank">메타문자 🎜를 사용하여 이를 작동할 수 있습니다. 🎜예제 코드는 다음과 같습니다.🎜rrreee🎜위 코드의 실행 결과에서 정규 표현식이 String 🎜javascript도 java와 일치할 수 있습니다. 정규식에 그룹화를 사용하고 반복 수량자를 사용하기 때문인가요? , 이전 하위 표현식을 0회 또는 1회 반복하도록 만들 수 있습니다. 🎜🎜🎜2. 하위 패턴 정의: 🎜🎜🎜그룹화의 또 다른 매우 중요한 역할은 전체 패턴에서 하위 패턴을 정의하는 것입니다. 🎜정규 표현식이 대상 문자열과 성공적으로 일치하면 대상 문자열에서 괄호 안의 첨자 표현식과 일치하는 부분을 추출할 수 있습니다. 🎜숫자로 시작하고 뒤에 하나 이상의 대소문자를 구분하지 않는 문자가 오는 문자열을 일치시키는 경우 정규식은 다음과 같이 작성할 수 있습니다.🎜🎜/d[a-zA-Z]+/ 🎜🎜우리가 정말로 관심을 갖고 필요한 것이 시작 숫자라면 정규 표현식의 숫자 부분을 괄호 안에 넣어 검색된 일치 항목에서 숫자를 추출할 수 있습니다.🎜🎜<code>/( d)[ a-zA-Z]+/🎜🎜🎜3. 하위 표현식 인용:🎜🎜정규 표현식 구문에서는 동일한 표현식 뒤에서 이전 하위 표현식을 참조할 수 있습니다. 이는 숫자 ""를 따라 수행됩니다. 이 숫자는 정규식에서 괄호로 묶인 하위 표현식의 위치를 ​​지정합니다. 예를 들어 1은 괄호로 묶인 첫 번째 하위 표현식이고, 당연히 2는 괄호로 묶인 두 번째 하위 표현식입니다. 🎜특별 참고 사항: 하위 표현식은 서로 중첩될 수 있으므로 하위 표현식의 위치를 ​​계산할 때 왼쪽 대괄호의 위치만 결정하면 됩니다. 예: 🎜🎜/(java(script))/🎜🎜위 정규 표현식에서 중첩된 하위 표현은 2로 표현될 수 있습니다. 🎜하위 표현식에 대한 참조는 참조의 일치 패턴이 아니라 하위 표현식의 일치 콘텐츠에 대한 참조입니다. 일반적으로 하위 표현식에 대한 참조는 일반적으로 제약 조건을 구현하는 데 사용됩니다. 🎜🎜/(['"])[^'"]*1/🎜🎜일반적으로 왼쪽 하단과 오른쪽 따옴표가 일치합니다. 앞이 큰따옴표이면 끝도 큰따옴표여야 합니다. 앞이 작은따옴표이면 끝도 작은따옴표여야 하며, 중간에 다른 따옴표가 올 수 없습니다. 예: 🎜🎜" Script House Welcomes you"🎜'Script House Welcomes You'🎜

그러면 위 정규식은 이 함수를 구현합니다. 이전 하위 표현식이 작은따옴표와 일치하면 다음 1은 작은따옴표를 의미합니다. 하위 표현식이 큰따옴표와 일치하면 다음 2는 큰따옴표를 의미합니다.
비참조 그룹화:
그룹화는 일정량의 시스템 리소스를 차지하며, 특히 정규식이 긴 경우 일치 속도가 느려집니다. 때로는 그룹을 설정하기만 하고 참조가 필요하지 않은 경우도 있으므로 비참조 유형 그룹화를 사용하는 것이 좋은 선택이 될 것입니다.

/(java(?:script))/

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 자료:

JS에서 정규식을 사용하여 문자열의 여러 공백을 하나의 공백으로 바꾸는 방법

PHP에서 정규식을 사용한 탐욕, 비탐욕 및 역추적의 효율성에 대한 자세한 설명( 코드)

위 내용은 정규식 그룹화에 대한 자세한 설명(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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