다음 기사에서는 JS 정규식에서 RegExp 객체와 대괄호 사용에 대해 간략하게 설명합니다. 내용이 꽤 괜찮아서 지금 공유해서 참고용으로 올려드리겠습니다.
RegExp 객체 생성:
기존 정규식은 직접 수량, 즉 슬래시 "/"로 묶인 문자를 사용하여 생성할 수 있습니다. 그러나 매개변수 변경이 필요한 환경에서는 RegExp() 생성자가 더 나은 선택입니다.
var reg1 = /'w+'/g;
var reg2 = new RegExp(''\w+'','g' );
두 가지 생성 방법을 비교하면 RegExp의 첫 번째 매개변수는 생성될 일반 문자열입니다. 한편으로는 직접적인 표현이 아니기 때문에 슬래시 "/"로 묶이지 않습니다. " ' " 표시와 이스케이프 기호 " "는 문자열에서 두 번 이스케이프되어야 합니다.
또한 직접 변수이든 RegExp() 생성자이든 새로운 RegExp 개체가 생성되어 변수에 할당됩니다.
match()와 exec()의 유사점과 차이점:
match와 exec는 문자열을 정규식과 일치시키는 일반적인 방법입니다. 두 가지로 구현된 함수는 비슷하지만 약간의 차이점이 있습니다.
1. 사용법
match는 문자열 패키징 개체의 방법입니다. 사용법: String.match(RegExp)
exec는 정규 표현식입니다. object 메서드, 사용법: RegExp.exec(String);
2. 반환된 결과
RegExp가 전역 플래그 "g"를 설정하지 않은 경우:
둘의 반환 결과는 동일합니다. 즉, 일치하는 값이 없으면 null을 반환하고, 일치하는 값이 있으면 배열(let array)을 반환한다. array[0]은 일치하는 문자열이고, array[1], array[2]...는 정규식에서 괄호로 묶인 하위 문자열 $1, $2...에 해당합니다. 동시에 배열에는 두 가지 속성이 있습니다. array.index는 일치하는 문자열의 초기 위치를 나타내고 array.input은 검색되는 문자열을 나타냅니다.
RegExp에 전역 플래그 "g"가 설정된 경우:
match는 값이 있으면 배열을 반환합니다. 배열의 각 항목은 일치하는 모든 문자열을 차례로 나타내므로 괄호와 일치하는 하위 문자열이 더 이상 없습니다. 현재 배열에는 인덱스 속성과 입력 속성이 없습니다.
exec는 전역 플래그 "g"가 없는 것과 동일하게 동작합니다. 이때 반환되는 것은 배열 배열이고, array[0]은 현재 일치하는 문자열이고, array[1], array[2]...는 현재 일치하는 항목 아래 괄호와 일치하는 문자열입니다. 이때, 원본 문자열에서 일치하는 문자열의 끝 이후의 위치를 나타내는 RegExp 객체의 lastIndex 속성에 주목해야 합니다. 더 이상 일치하는 결과가 없으면 lastIndex 속성이 0으로 설정됩니다. 따라서 lastIndex 루프를 사용하여 일치하는 모든 문자열을 찾을 수 있습니다.
여러 매칭 방법 지원:
js code
var testStr = "now test001 test002"; var re = /test(\d+)/ig; var r = ""; while(r = re.exec(testStr)) { alert(r[0] + " " + r[1]); }
또한 testStr.match(re)를 사용할 수도 있지만 이 경우에는 없습니다. g 옵션을 사용하면 첫 번째 일치 항목만 얻을 수 있습니다.
1. 정규식 규칙
1.1 일반 문자
다음 장에서 특별히 정의되지 않은 글자, 숫자, 한자, 밑줄, 구두점은 모두 "일반 문자"입니다. 표현식의 일반 문자는 문자열과 일치할 때 동일한 문자와 일치합니다.
예제 1: "abcde"라는 문자열을 일치시킬 때 일치하는 결과는 다음과 같습니다. 일치하는 내용은 "c"입니다. 일치하는 위치는 2에서 시작하여 3에서 끝납니다. (참고: 아래 첨자가 0으로 시작하는지 1로 시작하는지 여부는 현재 프로그래밍 언어에 따라 다를 수 있습니다.)
예 2: "bcd"라는 표현식, "abcde" 문자열을 일치시킬 때 일치 결과는 다음과 같습니다. 성공 일치; is: "bcd"; 일치하는 위치는 1에서 시작하여 4에서 끝납니다.
1.2 단순 이스케이프 문자
작성하기 불편한 일부 문자는 앞에 "/"를 추가하는 방법을 사용하세요. 사실 우리 모두는 이 캐릭터에 익숙합니다.
expression | 은 |
/r과 일치할 수 있습니다. /n | 은 캐리지 리턴 및 줄 바꿈을 나타냅니다. |
/t | 탭 |
// | 은 "/" 자체를 나타냅니다 |
이후 장에서 특별한 용도로 사용되는 다른 구두점도 있습니다. 구두점 앞에 "/"를 추가하면 기호 자체를 나타냅니다. 예를 들어 ^ 및 $에는 특별한 의미가 있습니다. 문자열에서 "^" 및 "$" 문자를 일치시키려면 표현식을 "/^" 및 "/$"로 작성해야 합니다.
expression | 은 |
/^ | 이 ^ 기호 자체와 일치합니다. |
/$ | $ 기호 자체와 일치 |
/. | 은 소수점(.) 자체와 일치합니다. |
이 이스케이프된 문자의 일치 방법은 "일반 문자"와 유사합니다. 동일한 문자와도 일치합니다.
예제 1: 문자열 "abc$de"와 일치하는 경우 "/$d"라는 표현은 다음과 같습니다. 일치하는 내용은 "$d"입니다. 일치하는 위치는 3에서 시작하여 끝납니다. 5시에.
1.3 '여러 문자'와 일치할 수 있는 표현식
정규식의 일부 표현 방법은 '여러 문자' 중 하나와 일치할 수 있습니다. 예를 들어 "/d"라는 표현식은 모든 숫자와 일치할 수 있습니다. 어떤 문자와도 일치할 수 있지만 여러 개가 아닌 하나만 일치할 수 있습니다. 이는 포커 게임과 같습니다. 킹과 킹은 어떤 카드든 교체할 수 있지만 카드는 하나만 교체할 수 있습니다.
expression | 은 |
/d | 0에서 9까지의 숫자 |
/w와 일치할 수 있습니다. | any 문자, 숫자 또는 밑줄 , 즉 A~Z, a~z, 0~9,_ |
/s | 중 하나 공백, 탭, 폼 피드 및 기타 공백 문자 포함 |
. | 소수점은 개행 문자(/n)를 제외한 모든 문자와 일치할 수 있습니다. |
예 1: 일치하는 표현식 "/d/d" "abc123"이 사용되는 경우, 일치 결과는 성공입니다. 일치하는 내용은 "12"입니다. 일치하는 위치는 3에서 시작하여 5에서 끝납니다.
예 2: "a./d"라는 표현에서 "aaa100"과 일치하면 일치 결과는 다음과 같습니다. 일치하는 내용은 "aa1"입니다. 일치하는 위치는 1에서 시작하여 4에서 끝납니다.
1.4 '여러 문자'와 일치할 수 있는 사용자 정의 표현식
어느 문자와도 일치할 수 있는 일련의 문자를 포함하려면 대괄호 [ ]를 사용하세요. [^]를 사용하면 해당 문자를 제외한 모든 문자와 일치하는 일련의 문자를 포함할 수 있습니다. 마찬가지로, 그 중 어느 하나라도 일치할 수는 있지만, 여러 개일 수는 없고 하나만 일치할 수 있습니다.
expression | 은 |
[ab5@] | 과 일치합니다. "a" 또는 "b" 또는 "5" 또는 "@" |
[^ abc] | 는 "a","b","c" |
[f-k] | 는 "f"~"k"와 일치합니다. 모든 문자 |
[^A-F0-3] | 은 "A"~"F","0"~"3"을 제외한 모든 문자 |
예 1: "[bcd][bcd]" 표현식이 "abc123"과 일치하는 경우 일치하는 내용은 "bc"입니다. 일치하는 위치는 1에서 시작하여 3에서 끝납니다.
예 2: "[^abc]" 표현식이 "abc123"과 일치하는 경우 일치하는 내용은 "1"입니다. 일치하는 위치는 3에서 시작하여 4에서 끝납니다.
1.5 일치 횟수를 수정하는 특수 기호
이전 장에서 언급한 표현식은 한 가지 유형의 문자만 일치할 수 있는지, 여러 문자 중 하나와 일치할 수 있는지 여부는 한 번만 일치할 수 있습니다. 표현식과 일치 항목 수를 수정하는 특수 기호를 사용하면 표현식을 다시 작성하지 않고도 반복적으로 일치시킬 수 있습니다.
사용 방법은 "수정 표현" 뒤에 "횟수 수정"을 붙이는 것입니다. 예를 들어 "[bcd][bcd]"는 "[bcd]{2}"로 쓸 수 있습니다.
Expression | Function |
{n} | n번 반복되는 표현식(예: "/w{2}"는 "/w/w"와 동일) "a{5}"는 "aaaaa" |
{m,n} | 표현식은 최소 m번, 최대 n번 반복됩니다. 예: "ba{1,3" }"는 "ba", "baa" 또는 "baaa"와 일치할 수 있습니다. |
{m,} | 표현식은 최소한 m번 반복됩니다(예: "/w/d{2,}). "는 "a12", "_456", "M12344"와 일치할 수 있습니다... |
? | 는 표현식 0 또는 1번과 일치하며, 이는 {0,1}과 동일합니다. 예: "a[ cd]?"는 "a","ac","ad"와 일치할 수 있습니다 |
+ | 표현식은 적어도 한 번 나타납니다. 이는 {1,}과 동일합니다. 예: "a+b" can "ab", "aab","aaab" 일치... |
* | 표현식은 나타나지 않거나 여러 번 나타납니다. 예를 들면 다음과 같습니다: "/ ^*b"는 "b"," ^^^b"와 일치할 수 있습니다... |
예 1: "/d+/.?/d*" 표현식이 "It Cost $12.5"와 일치하는 경우 일치하는 항목은 다음과 같습니다. 결과는 성공입니다. 일치하는 내용은 "12.5"입니다. 일치하는 위치는 10에서 시작하여 14에서 끝납니다.
예 2: "go{2,8}gle"이라는 표현이 "Ads by goooooogle"과 일치하는 경우 일치하는 내용은 다음과 같습니다. 일치하는 콘텐츠는 "goooooogle"입니다. 17시에.
1.6 추상적 의미를 나타내는 기타 특수 기호
일부 기호는 표현에서 추상적 특수 의미를 나타냅니다.
$ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/b | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
( ) | (1). 일치하는 수를 수정하면 괄호 안의 표현식이 전체적으로 수정될 수 있습니다 (2) 일치 결과를 얻을 때 괄호 안의 표현식과 일치하는 내용을 개별적으로 얻을 수 있습니다 |
예 5: "Tom|Jack"이라는 표현식은 "I'm Tom, he is Jack"과 일치합니다. ", 일치 결과는 성공입니다. 일치하는 내용은 "Tom"입니다. 일치하는 위치는 4에서 시작하여 7에서 끝납니다. 다음 일치 시 일치 결과는 다음과 같습니다. 일치된 내용은 "Jack"입니다. 일치하는 위치는 15에서 시작하여 19에서 끝납니다. | 예 6: "(go/s*)+" 표현식이 "Let's go go go!"와 일치하면 일치 결과는 다음과 같습니다. 일치하는 내용은 "go go go"입니다. 6시에 끝나고 14시에 끝납니다. 예 7: "\(/d+/.?/d*)"라는 표현이 "$10.9,\20.5"와 일치하면 일치 결과는 다음과 같습니다. 일치하는 내용은 "\20.5"입니다. 도달 시간은 6시부터 10시까지입니다. 대괄호 범위만 얻어서 일치하는 내용은 "20.5"입니다. |
2.1 일치 횟수에 있어서 탐욕과 비탐욕 |
(d)(/w+)
"/w+" "xxxdxxxd"
(d)(/w+)(d) | "/w+"는 첫 번째 "d"와 마지막 "d" 뒤의 모든 문자와 일치합니다. "xxxdxxx" 사이의 모든 문자입니다. "/w+"는 마지막 "d"와도 일치할 수 있지만 전체 표현식을 성공적으로 일치시키기 위해 "/w+"는 일치할 수 있었던 마지막 "d"를 "포기"할 수 있습니다 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
expression | 일치 결과 |
(d)(/w+?) | "/w+?" 가능한 한 첫 번째 "d" 뒤의 문자와 덜 일치합니다. 결과는 다음과 같습니다. "/w+?"는 하나의 "x" |
(d)(/w+?)(d) | for 전체 표현식이 성공적으로 일치하려면 "/w+?"가 "xxx"와 일치해야 다음 "d"가 일치해야 전체 표현식이 성공적으로 일치합니다. 따라서 결과는 다음과 같습니다. "/w+?"는 "xxx" |
추가 사례는 다음과 같습니다.
예 1: 표현식 "
aa
< /td> ;bb
aa
/td>bb
예 2: 대조적으로 "
aa< /p>
bb
2.2 역참조 /1, /2...
표현식이 일치하면 표현식 엔진은 괄호 "( )"에 포함된 표현식과 일치하는 문자열을 기록합니다. 일치 결과를 얻을 때 괄호 안의 표현식과 일치하는 문자열을 별도로 얻을 수 있습니다. 이는 이전 예제에서 여러 번 설명되었습니다. 실제 적용에서 특정 경계를 사용하여 검색하고 구하는 내용에 경계가 포함되지 않은 경우 괄호를 사용하여 원하는 범위를 지정해야 합니다. 예를 들어, 이전의 "
실제로 "괄호 안의 표현식과 일치하는 문자열"은 일치가 완료된 후에 사용할 수 있을 뿐만 아니라 일치 과정에서도 사용할 수 있습니다. 표현식 뒤의 부분은 이전의 "이미 문자열과 일치하는 괄호 안의 부분 일치"를 참조할 수 있습니다. 참조 방법은 "/"에 숫자를 더한 것입니다. "/1"은 첫 번째 대괄호 쌍에 일치하는 문자열을 나타내고, "/2"는 두 번째 대괄호 쌍에 일치하는 문자열을 나타냅니다. 한 쌍의 대괄호에 다른 대괄호 쌍이 포함된 경우에도 마찬가지입니다. 외부 쌍 레이어의 괄호가 먼저 정렬됩니다. 즉, 왼쪽 대괄호 "("가 먼저 있는 쌍이 먼저 정렬되고, 그러면 이 쌍이 먼저 정렬됩니다.
예는 다음과 같습니다.
예 1: 표현식 "('|")(.*?)(/ 1 )" " 'Hello', "World" "를 일치시키면 일치 결과는 성공입니다. 일치하는 내용은 " 'Hello' "입니다. 다음 항목을 다시 일치시키면 " "World" "가 일치할 수 있습니다.
예 2: "(/w)/1{4,}" 표현식이 "aa bbbb abcdefg ccccc 111121111 999999999"와 일치하면 일치 결과는 다음과 같습니다. 일치하는 콘텐츠가 다시 "ccccc"이면 999999999를 얻게 됩니다. . 이 표현식에서는 "/w" 범위의 문자가 5번 이상 반복되어야 합니다. "/w{5,}"와의 차이점에 유의하세요.
예 3: 표현식 "<(/w+) /s* (/w+(=('|").*?/4)?/s*)*>.*?/1>"는 "
2.3 사전 검색, 역 사전 검색, 일치 없음
이전 장에서는 "^", "$", "와 같은 추상적 의미를 나타내는 몇 가지 특수 기호에 대해 설명했습니다. /b". 모두 한 가지 공통점이 있습니다. 즉, 문자 자체와 일치하지 않고 "문자열의 양쪽 끝" 또는 "문자 사이의 간격"에만 조건을 첨부한다는 것입니다. 이 개념을 이해한 후에는 섹션 "두 끝" 또는 "간극"에 조건을 부여하는 또 다른 보다 유연한 표현 방법을 계속해서 소개할 예정입니다.
앞으로 사전 검색: "(?=xxxxx)", "(?!xxxxx)"
형식: " (?=xxxxx)"는 일치하는 문자열에서 자신이 위치한 "gap" 또는 "양쪽 끝"에 조건을 붙인다: gap의 오른쪽은 xxxxx 부분의 표현과 일치할 수 있어야 한다. 이는 이 간격에 대한 추가 조건으로만 사용되며, 이 간격 뒤의 문자를 실제로 일치시키는 후속 표현식에 영향을 주지 않습니다. 이는 앞뒤의 문자를 일치시키지 않는 "/b"와 유사합니다.
예 1: "Windows (?=NT|XP)"라는 표현은 "Windows 98, Windows NT, Windows 2000"에만 해당됩니다. "Windows NT"의 "Windows"와 일치하며 다른 "Windows" 단어는 일치하지 않습니다.
예 2: "(/w)((?=/1/1/1)(/1))+" 표현식이 "aaa ffffff 999999999" 문자열과 일치하는 경우 처음 6개의 "f"와 일치합니다. 4는 9개의 "9" 중 처음 7개와 일치할 수 있습니다. 이 표현식은 다음과 같이 읽을 수 있습니다. 문자와 숫자가 4회 이상 반복되면 마지막 2자리 앞 부분이 일치합니다. 물론, 이 표현은 꼭 이렇게 쓸 필요는 없고 단지 예시용으로만 사용된 것입니다.
형식: 공백 오른쪽에 있는 "(?!xxxxx)"는 표현식의 xxxxx 부분과 일치해서는 안 됩니다.
예 3: "((?!/bstop/b).)+"라는 표현이 "fdjka ljfdl stop fjdsla fdj"와 일치하는 경우 "stop"이 없으면 처음부터 일치합니다. 문자열 stop"에서는 전체 문자열과 일치합니다.
예 4: "do(?!/w)" 표현식이 "done, do, dog" 문자열과 일치하는 경우 "do"만 일치할 수 있습니다. 이 예에서 "do" 뒤에 "(?!/w)"를 사용하면 "/b"를 사용하는 것과 동일한 효과가 있습니다.
역방향 사전 검색: "(?<=xxxxx)", "(?
이 두 형식의 개념은 정방향 사전 검색과 유사합니다. 역방향 사전 검색에 필요한 조건입니다. are : 간격의 "왼쪽"에서 두 형식은 오른쪽을 판단하는 대신 지정된 표현식과 일치할 수 있어야 하고 일치할 수 없어야 한다고 각각 요구합니다. "정방향 사전 검색"과 동일한 점은 간격에 대한 추가 조건이며 문자 자체와 일치하지 않는다는 것입니다.
예 5: "(?<=/d{4})/d+(?=/d{4})" 표현식이 "1234567890123456"과 일치하는 경우 처음 4개 숫자와 마지막 4개 숫자를 제외하고 일치합니다. . 중간에 8개의 숫자가 있습니다. JScript.RegExp는 역방향 사전 검색을 지원하지 않으므로 이 예를 시연할 수 없습니다. Java 1.4 이상의 java.util.regex 패키지, .NET의 System.Text.RegularExpressions 네임스페이스 및 권장되는 가장 간단하고 사용하기 쉬운 DEELX 일반 엔진과 같은 다른 많은 엔진은 역방향 사전 검색을 지원할 수 있습니다. 이 사이트.
3. 기타 공통 규칙
이전 설명에서 언급되지 않은 다양한 정규 표현식 엔진에 공통되는 몇 가지 규칙도 있습니다.
3.1 표현식에서 "/xXX" 및 "/uXXXX"를 사용하여 문자를 나타낼 수 있습니다("X"는 16진수를 나타냄).
/xXX0 ~ 255 범위의 문자. 예: 공백은 "/x20"으로 표시 가능 | /uXXXX |
모든 문자는 "/로 표시 가능" u" "/s", "/d", "/w", "/b" 표현식에 "/中" | 3.2와 같이 해당 숫자의 4자리 16진수 표현을 추가합니다. 동시에 해당 대문자는 반대 의미를 나타냅니다 |
expression | 일치할 수 있음 |
공백이 아닌 모든 문자 일치("/s"는 일치할 수 있음) 각 공백 문자와 일치) | /D | ||||||||||||||||||||||||||||||
숫자가 아닌 모든 문자와 일치 | /W | ||||||||||||||||||||||||||||||
모든 문자, 숫자 및 밑줄 이외의 문자와 일치 | /B | ||||||||||||||||||||||||||||||
는 단어가 아닌 경계와 일치합니다. 즉, 왼쪽과 오른쪽이 모두 "/w" 범위에 있거나 왼쪽과 오른쪽이 모두 "/w" 범위에 없는 경우 문자 간격과 일치합니다. | 3.3은 표현식에 특별한 의미가 있습니다. 문자 자체의 문자 요약과 일치하려면 "/"를 추가해야 합니다. 입력 문자열은 시작 위치입니다. "^" 문자 자체를 일치시키려면 "/^"
Ignorecase 기본적으로 The 표현식은 수식의 문자는 대소문자를 구분합니다. 대소문자를 구분하지 않도록 Ignorecase를 구성합니다. 일부 표현 엔진은 "대소문자" 개념을 UNICODE 범위의 대문자와 소문자로 확장합니다.
|