자바스크립트, 정규식: 예제, 정규식 확인. JavaScript 정규식 가이드 정규식 PHP 특수 문자




새로운 RegExp(패턴[, 플래그])

정규식 고급

다음과 같이 알려져 있습니다. 리터럴 구문이 선호됩니다.(/테스트/i).

정규식을 미리 알 수 없는 경우 생성자(new RegExp)를 사용하여 (문자열로) 정규식을 생성하는 것이 바람직합니다.

하지만 주의하세요. "슬래시 기호" \는 코드 전환 역할을 하기 때문에 문자열 리터럴(새 RegExp)에 두 번 작성해야 합니다. \\

플래그

일치할 때 대소문자를 무시합니다.

g 전역 일치는 로컬 일치(기본적으로 패턴의 첫 번째 인스턴스만 일치)와 달리 패턴의 모든 인스턴스 일치를 허용합니다.

연산자

무엇 어떻게 설명 용법
깃발 등록합니다. 대소문자를 구분하지 않는 표현 /testik/i
g 깃발 글로벌 검색 /testik/g
깃발 텍스트 영역에서 얻을 수 있는 많은 문자열에 대한 일치를 허용합니다.
문자 클래스 연산자 문자 세트 일치 - a부터 z까지의 범위에 있는 모든 문자
^ 캐럿 연산자 제외하고 [^a-z] - a에서 z까지의 범위에 있는 문자를 제외한 모든 문자.
- 하이픈 연산자 다음을 포함한 값의 범위를 나타냅니다. - a부터 z까지의 범위에 있는 모든 문자
\ 이스케이프 연산자 다음 문자를 이스케이프합니다. \\
^ 일치 연산자 시작 패턴 일치는 처음에 발생해야 합니다. /^테스트/g
$ 일치 끝 연산자 패턴 매칭은 마지막에 일어나야 합니다 /테스트$/g
? 운영자? 캐릭터를 선택적으로 만듭니다 /t?est/g
+ 연산자 + /t+est/g
+ 연산자 + 기호는 한 번 또는 여러 번 나타나야 합니다. /t+est/g
* 운영자 * 기호는 한 번 또는 반복적으로 나타나거나 전혀 없어야 합니다. /t+est/g
{} 운영자() 고정된 문자 반복 횟수 설정 /t(4)est/g
{,} 운영자 (,) 특정 제한 내에서 기호의 반복 횟수를 설정합니다. /t(4,9)est/g

미리 정의된 문자 클래스

사전 정의된 멤버 비교
\티 가로 탭
\N 라인 번역
. 줄 바꿈을 제외한 모든 문자
\디 해당하는 임의의 10번째 숫자
\디 [^0-9]에 해당하는 10번째 숫자를 제외한 모든 문자
\w 해당하는 모든 문자(숫자, 문자, 밑줄)
\W 숫자, 문자, 밑줄 이외의 모든 문자([^A-Za-z0-9]와 동일)
\에스 공백 문자
\에스 공백을 제외한 모든 문자
\비 단어 경계
\비 단어의 경계가 아니라 내부입니다. 부분

그룹화()

멤버 그룹에 +(/(abcd)+/)와 같은 연산자를 적용하려면 괄호()를 사용하면 됩니다.

고정

괄호()로 묶인 정규식 부분을 다음과 같이 부릅니다. 정착.

다음 예를 고려하십시오.

/^()k\1/

\1 은 a , b , c 의 문자가 아닙니다.
\1은 시작하는 문자입니다. 첫 번째 문자와 일치. 즉, \1과 일치하는 문자는 정규식이 해석될 때까지 알 수 없습니다.

고정되지 않은 그룹

괄호()는 두 가지 경우, 즉 그룹화용과 고정 표시용으로 사용됩니다. 그러나 커밋이 필요하지 않기 때문에 그룹화에만 ()을 사용해야 하는 상황이 있습니다. 또한 불필요한 커밋을 제거하면 정규식 처리 메커니즘이 더 쉬워집니다.

그래서, 고정 방지여는 괄호 앞에 다음을 넣어야 합니다: ?:

Str = "

안녕하세요 세계!
"; 발견 = str.match(/<(?:\/?)(?:\w+)(?:[^>]*?)>/i); console.log("수정 없이 발견됨: ", 발견); // [ "
" ]

테스트 기능

정규식.테스트()

테스트 함수는 정규식이 문자열(str)과 일치하는지 확인합니다. true 또는 false 를 반환합니다.

사용 예:

자바스크립트

함수 codeF(str)( return /^\d(5)-\d(2)/.test(str); ) //console.log(codeF("12345-12ss")); // 참 //console.log(codeF("1245-12ss")); // 거짓

일치 기능

str.match(정규식)

match 함수는 값 배열을 반환하거나 일치하는 항목이 없으면 null을 반환합니다. 확인하다: 정규식에 g 플래그(전역 검색 수행)가 없으면 match 메서드는 문자열의 첫 번째 일치 항목을 반환하고 예제에서 볼 수 있듯이 일치 항목의 배열로 반환합니다. 고정 가을(괄호로 묶인 정규식의 일부)

자바스크립트

str = "자세한 내용은 3.4.5.1장을 참조하세요."; re = /chapter (\d+(\.\d)*)/i // 커밋 포함(전역 플래그 없음)found = str.match(re) console.log(found); // ["3.4.5.1장", "3.4.5.1", ".1"]

match() 메소드에 전역 정규식(g 플래그 사용)을 제공하면 배열도 반환됩니다. 하지만 GLOBAL 경기에서는. 즉, 기록된 결과가 반환되지 않습니다.

자바스크립트

str = "자세한 내용은 3.4.5.1장, 7.5장을 참조하세요."; re = /chapter (\d+(\.\d)*)/ig // 커밋 없음 - 전역적으로 발견됨 = str.match(re) console.log(found); // ["3.4.5.1장", "7.5장"]

실행 기능

정규표현식.exec(str)

exec 함수는 정규식이 문자열(str)과 일치하는지 확인합니다. 결과 배열(커밋 포함) 또는 null 을 반환합니다. exec에 대한 각 후속 호출(예: while을 사용하는 경우)이 발생하고(exec가 마지막 검색 끝의 인덱스인 lastIndex를 자동으로 업데이트하여) 다음 전역 일치 항목으로 이동합니다(g 플래그가 지정된 경우).

자바스크립트

var HTML = "
쾅! 부랑자!
"; var reg = /<(\/?)(\w+)([^>]*?)>/g; //console.log(reg.exec(html)); // ["
", "", "div", " class="test""] while((match = reg.exec(html)) !== null)( console.log(reg.exec(html)); ) /* [" ", "", "b", ""] [" ", "", "em", ""] ["
", "/", "div", ""] */

전역 플래그가 없으면 match 및 exec 메소드는 동일하게 작동합니다. 즉, 첫 번째 전역 일치 및 커밋이 포함된 배열을 반환합니다.

자바스크립트

// 일치 var html = "
쾅! 부랑자!
"; var reg = /<(\/?)(\w+)([^>]*?)>/; // 전역 없이 console.log(html.match(reg)); // ["
", "", "div", " class="test""] // 실행 var html = "
쾅! 부랑자!
"; var reg = /<(\/?)(\w+)([^>]*?)>/; // 전역 없이 console.log(reg.exec(html)); // ["
", "", "div", " 클래스="테스트""]

기능 교체

str.replace(regexp, newSubStr|함수)
  • 정규식 -reg. 표현;
  • newSubStr - 텍스트에서 발견된 표현식이 변경되는 문자열입니다.
  • 함수 - 매개 변수의 변수 목록으로 찾은 각 일치 항목에 대해 호출됩니다(문자열의 전역 검색은 패턴 일치의 모든 인스턴스를 찾는다는 점을 기억하세요).

이 함수의 반환 값은 대체 역할을 합니다.

기능 매개변수:

  • 1 - 일치하는 부분 문자열을 완성하세요.
  • 2 - 브래킷 그룹(고정)의 의미.
  • 3 - 소스 문자열에서 일치하는 항목의 인덱스(위치)입니다.
  • 4 - 소스 문자열.

이 메서드는 호출 문자열을 변경하지 않지만 일치 항목을 바꾼 후 새 문자열을 반환합니다. 전역 검색 및 바꾸기를 수행하려면 g 플래그와 함께 regexp를 사용하세요.

"GHGHGHGTTTT".replace(//g,"K"); //"KKKKKKKKKK"

자바스크립트

function upLetter(allStr,letter) ( return letter.toUpperCase(); ) var res = "border-top-width".replace(/-(\w)/g, upLetter); console.log(res); //테두리 상단 너비

정규 표현식텍스트의 단어와 표현을 삭제, 추출 또는 교체하기 위해 유연한 검색을 수행할 수 있습니다.

통사론:

//정규 표현식을 생성하기 위한 첫 번째 옵션 var regexp=new RegExp( 견본,수정자); //정규 표현식을 생성하기 위한 두 번째 옵션 var regexp=/ 견본/수정자;

견본검색할 문자 패턴을 지정할 수 있습니다.

수정자검색 동작을 사용자 정의할 수 있습니다:

  • - 대소문자를 고려하지 않고 검색합니다.
  • g- 전역 검색(첫 번째 항목뿐만 아니라 문서에서 일치하는 모든 항목을 찾습니다.)
  • - 여러 줄 검색.

단어 및 표현 검색

정규식의 가장 간단한 사용법은 다양한 텍스트에서 단어와 표현을 검색하는 것입니다.

다음은 수정자를 사용하여 검색을 사용하는 예입니다.

//정규식 설정 rv1 rv1=/Russia/; //정규식 지정 rv2 rv2=/Russia/g; //정규식 지정 rv3 rv3=/Russia/ig; //굵게 표시된 부분은 //rv1 표현식을 사용할 때 텍스트에서 일치하는 항목이 발견되는 위치를 나타냅니다. 러시아는 세계에서 가장 큰 국가입니다. 러시아는 18개국과 국경을 접하고 있습니다. 러시아는 소련의 후계 국가이다. //굵게 표시된 부분은 //rv2 표현식을 사용할 때 텍스트에서 일치하는 항목이 발견되는 위치를 나타냅니다. 러시아는 세계에서 가장 큰 국가입니다. 러시아는 18개국과 국경을 접하고 있습니다. 러시아는 소련의 후계 국가입니다."; //rv3 표현식을 사용할 때 //텍스트에서 일치하는 항목을 찾을 수 있는 곳은 굵은 글씨로 강조 표시되어 있습니다. 러시아는 세계에서 가장 큰 국가입니다. 러시아는 18개 국가와 국경을 접하고 있습니다. 러시아 소련의 후계국이다.";

특수 기호

일반 문자 외에도 정규식 패턴을 사용할 수 있습니다. 특수 기호(메타 문자). 설명과 함께 특수 문자가 아래 표에 나와 있습니다.

특수문자 설명
. 줄 끝 문자를 제외한 모든 문자와 일치합니다.
\w 모든 알파벳 문자와 일치합니다.
\W 알파벳이 아닌 모든 문자와 일치합니다.
\디 숫자인 문자와 일치합니다.
\디 숫자가 아닌 문자와 일치합니다.
\에스 공백 문자와 일치합니다.
\에스 공백이 아닌 문자와 일치합니다.
\비 일치 항목은 단어 경계(시작 또는 끝)에서만 찾을 수 있습니다.
\비 일치 항목은 단어가 아닌 경계에서만 검색됩니다.
\N 개행 문자와 일치합니다.

/* reg1 표현식은 두 개의 임의 문자로 시작하고 "vet"로 끝나는 모든 단어를 찾습니다. 문장의 단어가 공백으로 구분되어 있으므로 시작과 끝에 특수 문자 \s를 추가합니다. */ reg1=/\s..vet\s/g; txt="안녕하세요 언약 코듀로이 옷장"; document.write(txt.match(reg1) + "
"); /* reg2 표현식은 세 개의 임의 문자로 시작하고 "vet"로 끝나는 모든 단어를 찾습니다. */ reg2=/\s...vet\s/g; document.write(txt.match(reg2) + "
"); txt1=" hi2hello hi 1hello "; /* reg3 표현식은 "at"로 시작하고 뒤에 1자리 숫자가 오고 "vet"로 끝나는 모든 단어를 찾습니다. */ var reg3=/at\dvet/g; document . 쓰기(txt1.match(reg3) + "
"); // reg4 표현식은 텍스트의 모든 숫자를 찾습니다. var reg4=/\d/g; txt2="5년의 연구, 3년의 항해, 9년의 촬영." document.write(txt2. 일치(reg4) + "
");

퀵뷰

대괄호 안의 기호

대괄호 사용 [케유]검색할 문자 그룹을 지정할 수 있습니다.

대괄호 안의 문자 그룹 앞에 있는 ^ 문자 [^kwg]지정된 문자를 제외한 모든 알파벳 문자를 검색해야 함을 나타냅니다.

대괄호 안의 문자 사이에 대시(-) 사용 [a~z]검색할 문자 범위를 지정할 수 있습니다.

대괄호를 사용하여 숫자를 검색할 수도 있습니다.

//정규식 설정 reg1 reg1=/\sko[tdm]\s/g; //텍스트 문자열 설정 txt1 txt1=" 고양이 끈 코드 서랍장 com 카펫 "; //정규식 reg1을 사용하여 txt1 문자열을 검색합니다. document.write(txt1.match(reg1) + "
"); reg2=/\sslo[^tg]/g; txt2=" 슬롯 코끼리 음절 "; document.write(txt2.match(reg2) + "
"); reg3=//g; txt3="공부 5년, 수영 3년, 사격 9년"; document.write(txt3.match(reg3));

퀵뷰

수량자

수량자- 앞의 문자나 문자 그룹이 일치 항목에 몇 번이나 나타나야 하는지를 지정할 수 있는 구성입니다.

통사론:

//앞의 문자는 x - 번 나타나야 합니다. (엑스)//앞의 문자는 x부터 y번까지 발생해야 합니다. (x,y)//앞의 문자는 최소한 x번 이상 나타나야 합니다. (엑스,)//앞의 문자가 0번 이상 나타나야 함을 지정합니다. * //앞의 문자가 1번 이상 나타나야 함을 지정합니다. + //앞의 문자가 0번 또는 1번 나타나야 함을 지정합니다. ?


//정규식 지정 rv1 rv1=/ko(5)shka/g //정규식 지정 rv2 rv2=/ko(3,)shka/g //정규식 지정 rv3 rv3=/ko+shka/g //정규식 지정 rv4 rv4=/ko?shka/g //정규식 설정 rv5 rv5=/ko*shka/g //굵은 글꼴은 //식 rv1을 사용할 때 텍스트에서 일치하는 위치를 보여줍니다. kshka cat kooshka koooshka kooooshka kooooshka kooooooshka kooooooshka //굵게 표시된 부분은 //rv2 표현식을 사용할 때 텍스트에서 일치하는 항목을 찾을 수 있음을 나타냅니다. kshka cat kooshka 쿠오오오시카 쿠오오오시카 쿠오오오시카 쿠오오오시카//굵게 표시된 부분은 //표현식 rv3: kshka를 사용할 때 텍스트에서 일치하는 부분을 찾을 수 있음을 나타냅니다. 고양이 쿠시카 쿠우시카 쿠우시카 쿠우시카 쿠우우쉬카 쿠우오오슈카//굵게 표시된 부분은 //rv4 표현식을 사용할 때 텍스트에서 일치 항목을 찾을 위치를 나타냅니다. kshka cat kooshka koooshka kooooshka koooooshka koooooshka kooooooshka //굵게 표시된 부분은 //rv5 표현식을 사용할 때 텍스트에서 일치 항목을 찾을 위치를 나타냅니다. kshka 고양이 kooshka kooooshka kooooshka kooooshka kooooooshka kooooooshka

메모:일반 문자처럼 특수 문자(예: . * + ? 또는 ())를 사용하려면 앞에 \를 입력해야 합니다.

괄호 사용

정규식 패턴의 일부를 괄호로 묶으면 해당 패턴 부분에서 찾은 일치 항목을 기억하도록 표현식에 지시할 수 있습니다. 저장된 일치 항목은 나중에 코드에서 사용할 수 있습니다.

예를 들어 정규식 /(Dmitry)\sVasiliev/는 "Dmitry Vasiliev" 문자열을 찾고 하위 문자열 "Dmitry"를 기억합니다.

아래 예에서는 교체() 메서드를 사용하여 텍스트의 단어 순서를 변경합니다. 저장된 일치 항목에 액세스하려면 $1과 $2를 사용합니다.

Var regexp = /(Dmitry)\s(Vasiliev)/; var text = "드미트리 바실리예프"; var newtext = text.replace(regexp, "$2 $1"); document.write(newtext);

퀵뷰

괄호를 사용하여 수량자 앞에 문자를 그룹화할 수 있습니다.

정규 표현식

정규식문자 패턴을 설명하는 객체입니다. JavaScript의 RegExp 클래스는 정규식을 나타내며 String 및 RegExp 클래스 개체는 정규식을 사용하여 패턴 일치와 텍스트 검색 및 바꾸기 작업을 수행하는 메서드를 정의합니다. JavaScript 정규식 문법에는 Perl 5에서 사용되는 정규식 구문의 완전한 하위 집합이 포함되어 있으므로 Perl에 대한 경험이 있으면 JavaScript 프로그램에서 패턴을 쉽게 작성할 수 있습니다.

ECMAScript에서 지원되지 않는 Perl 정규 표현식의 기능에는 s(한 줄 모드) 및 x(확장 구문) 플래그가 포함됩니다. 이스케이프 시퀀스 \a, \e, \l, \u, \L, \U, \E, \Q, \A, \Z, \z 및 \G 및 (?로 시작하는 기타 확장 구문.

정규식 정의

JavaScript에서 정규식은 객체로 표현됩니다. 정규식. RegExp 객체는 RegExp() 생성자를 사용하여 생성할 수 있지만 특수 리터럴 구문을 사용하여 생성되는 경우가 더 많습니다. 문자열 리터럴이 따옴표로 묶인 문자로 지정되는 것처럼 정규식 리터럴은 슬래시 문자 쌍(/)으로 묶인 문자로 지정됩니다. 따라서 JavaScript 코드에는 다음과 같은 줄이 포함될 수 있습니다.

Var 패턴 = /s$/;

이 줄은 새로운 RegExp 객체를 생성하고 이를 패턴 변수에 할당합니다. 이 RegExp 개체는 "s" 문자로 끝나는 문자열을 검색합니다. RegExp() 생성자를 사용하여 동일한 정규식을 정의할 수 있습니다.

Var 패턴 = new RegExp("s$");

정규식 패턴 사양은 일련의 문자로 구성됩니다. 모든 영숫자를 포함한 대부분의 문자는 문자 그대로 존재해야 하는 문자를 설명합니다. 즉, 정규식 /java/는 하위 문자열 "java"를 포함하는 모든 행과 일치합니다.

정규식의 다른 문자는 정확히 동등한 문자를 찾는 데 사용되는 것이 아니라 특별한 의미를 갖습니다. 예를 들어 정규식 /s$/에는 두 개의 문자가 포함됩니다. 첫 번째 문자 s는 리터럴 문자 검색을 나타냅니다. 둘째, $는 줄의 끝을 표시하는 특수 메타 문자입니다. 따라서 이 정규식은 문자 s로 끝나는 모든 문자열과 일치합니다.

다음 섹션에서는 JavaScript의 정규식에 사용되는 다양한 문자와 메타문자를 설명합니다.

리터럴 문자

앞서 언급했듯이 정규식의 모든 알파벳 문자와 숫자는 서로 일치합니다. JavaScript의 정규식 구문은 백슬래시(\) 문자로 시작하는 이스케이프 시퀀스를 사용하여 알파벳이 아닌 특정 문자를 지정하는 기능도 지원합니다. 예를 들어, \n 시퀀스는 개행 문자와 일치합니다. 이러한 기호는 아래 표에 나열되어 있습니다.

일부 구두점은 정규식에서 특별한 의미를 갖습니다.

^ $ . * + ? = ! : | \ / () { } -

이러한 기호의 의미는 다음 섹션에서 설명됩니다. 그 중 일부는 특정 정규식 컨텍스트에서만 특별한 의미를 갖는 반면, 다른 컨텍스트에서는 문자 그대로 해석됩니다. 그러나 일반적으로 정규식에 이러한 문자를 문자 그대로 포함하려면 해당 문자 앞에 백슬래시 문자를 와야 합니다. 따옴표 및 @와 같은 다른 문자는 특별한 의미가 없으며 단순히 정규식에서 일치합니다.

앞에 \가 있어야 하는 문자를 정확히 기억할 수 없는 경우 문자 앞에 백슬래시를 넣어도 안전합니다. 그러나 많은 문자와 숫자는 슬래시 문자와 결합될 때 특별한 의미를 갖기 때문에 문자 그대로 찾고 있는 문자와 숫자 앞에 \ 문자가 오면 안 됩니다. 정규식에 백슬래시 문자 자체를 포함하려면 반드시 그 앞에 다른 백슬래시 문자를 와야 합니다. 예를 들어, 다음 정규식은 백슬래시 문자가 포함된 모든 문자열과 일치합니다: /\\/.

캐릭터 클래스

개별 리터럴 문자를 대괄호로 묶어 문자 클래스로 결합할 수 있습니다. 문자 클래스는 해당 클래스에 포함된 모든 문자와 일치합니다. 따라서 정규식 //은 문자 a, b 또는 c 중 하나와 일치합니다.

괄호 안에 지정된 문자를 제외한 모든 문자와 일치하도록 부정 문자 클래스를 정의할 수도 있습니다. 부정 문자 클래스는 왼쪽 괄호 뒤의 첫 번째 문자인 ^ 문자로 지정됩니다. 정규식 /[^abc]/는 a, b 또는 c 이외의 모든 문자와 일치합니다. 문자 클래스에서는 하이픈을 사용하여 문자 범위를 지정할 수 있습니다. 모든 소문자 라틴 문자는 // 표현식을 사용하여 찾을 수 있으며 라틴 문자 세트의 모든 문자 또는 숫자는 // 표현식을 사용하여 찾을 수 있습니다.

특정 문자 클래스는 특히 일반적이므로 JavaScript의 정규식 구문에는 이를 나타내는 특수 문자와 이스케이프 시퀀스가 ​​포함됩니다. 따라서 \s는 공백, 탭 및 모든 유니코드 공백 문자와 일치하고 \S는 유니코드가 아닌 모든 공백 문자와 일치합니다.

아래 표에는 이러한 특수 문자 목록과 문자 클래스 구문이 나와 있습니다. (일부 문자 클래스 이스케이프 시퀀스는 ASCII 문자에만 일치하며 유니코드 문자와 함께 작동하도록 확장되지 않습니다. 예를 들어 고유한 유니코드 문자 클래스를 명시적으로 정의할 수 있습니다. /[\u0400-\u04FF]/는 모든 문자와 일치합니다. 키릴 문자 .)

JavaScript 정규식 문자 클래스
상징 일치
[...] 괄호 안에 표시된 모든 문자
[^...] 괄호 안에 나열되지 않은 모든 문자
. 개행 문자나 기타 유니코드 줄 구분 기호를 제외한 모든 문자
\w 모든 ASCII 텍스트 문자. 동등한
\W ASCII 텍스트 문자가 아닌 모든 문자입니다. [^a-zA-Z0-9_]와 동일
\에스 유니코드 세트의 공백 문자
\에스 유니코드 세트의 공백이 아닌 문자입니다. \w와 \S 문자는 같은 것이 아닙니다.
\디 모든 ASCII 숫자. 동등한
\디 ASCII 숫자 이외의 모든 문자입니다. [^0-9]와 동일
[\비] 백스페이스 문자 리터럴

클래스 특수 문자 이스케이프 시퀀스는 대괄호로 묶일 수 있습니다. \s는 모든 공백 문자와 일치하고 \d는 모든 숫자와 일치하므로 /[\s\d]/는 모든 공백 문자 또는 숫자와 일치합니다.

되풀이

지금까지 얻은 정규식 구문에 대한 지식을 고려하면 두 자리 숫자를 /\d\d/로 설명하거나 네 자리 숫자를 /\d\d\d\d/로 설명할 수 있지만 다음과 같이 설명할 수는 없습니다. , 임의의 숫자로 구성된 숫자 또는 선택적 숫자가 뒤따르는 3개의 문자로 구성된 문자열을 설명합니다. 이러한 보다 복잡한 패턴은 주어진 정규식 요소가 반복될 수 있는 횟수를 지정하는 정규식 구문을 사용합니다.

반복 기호는 항상 해당 기호가 적용된 패턴을 따릅니다. 일부 유형의 반복은 매우 자주 사용되며 이러한 경우를 표시하기 위해 특수 기호를 사용할 수 있습니다. 예를 들어 +는 이전 패턴의 하나 이상의 인스턴스와 일치합니다. 다음 표에는 반복 구문이 요약되어 있습니다.

다음 줄은 몇 가지 예를 보여줍니다.

Var 패턴 = /\d(2,4)/; // 2~4자리 숫자를 포함하는 숫자와 일치합니다. 패턴 = /\w(3)\d?/; // 정확히 세 단어 문자와 하나의 선택적 숫자 패턴을 일치시킵니다. = /\s+java\s+/; // "java"라는 단어와 하나 이상의 공백을 일치시킵니다. // 앞뒤에 // 패턴 = /[^(]*/; // 여는 괄호를 제외한 0개 이상의 문자와 일치합니다.

반복 문자 * 및 ?를 사용할 때는 주의하세요. 앞에 지정된 패턴이 없어 문자가 없는 것과 일치할 수 있습니다. 예를 들어 정규식 /a*/는 문자 a를 포함하지 않기 때문에 문자열 "bbbb"와 일치합니다.

표에 나열된 반복 문자는 정규식의 후속 부분이 일치하도록 허용하는 최대 가능한 반복 횟수를 나타냅니다. 이것을 탐욕스러운 반복이라고 합니다. 탐욕스럽지 않은 방식으로 반복 수행을 구현하는 것도 가능합니다. 반복 기호(또는 기호) 뒤에 물음표를 표시하는 것으로 충분합니다: ??, +?, *? 아니면 (1.5)?.

예를 들어, 정규식 /a+/는 하나 이상의 문자 a 인스턴스와 일치합니다. 문자열 "aaa"에 적용하면 세 글자 모두와 일치합니다. 반면에 /a+?/ 표현식은 하나 이상의 문자 a 인스턴스와 일치하며 가능한 가장 작은 수의 문자를 선택합니다. 동일한 문자열에 적용하면 이 패턴은 첫 번째 문자 a만 일치합니다.

“탐욕스러운” 반복이 항상 기대했던 결과를 가져오는 것은 아닙니다. 하나 이상의 a 뒤에 b가 오는 패턴과 일치하는 /a+b/ 패턴을 고려해 보세요. 문자열 "aaab"에 적용하면 전체 문자열에 해당합니다.

이제 /a+?b/의 "탐욕적이지 않은" 버전을 확인해 보겠습니다. 하나의 a가 앞에 오는 b와 일치한다고 생각할 수도 있습니다. 동일한 문자열에 적용되는 경우 "aaab"은 단일 문자 a 및 마지막 문자 b와 일치할 것으로 예상됩니다. 그러나 이 패턴은 Greedy 버전과 마찬가지로 실제로 전체 문자열과 일치합니다. 사실 정규식 패턴 검색은 문자열에서 일치가 가능한 첫 번째 위치를 찾는 방식으로 수행됩니다. 문자열의 첫 번째 문자부터 일치가 가능하므로 후속 문자부터 시작하는 더 짧은 일치도 고려되지 않습니다.

대안, 그룹화 및 링크

정규식 문법에는 대안 정의, 하위 표현식 그룹화 및 이전 하위 표현식에 대한 참조를 위한 특수 문자가 포함됩니다. 파이프 기호 | 대안을 분리하는 역할을 합니다. 예를 들어 /ab|cd|ef/는 문자열 "ab", 문자열 "cd" 또는 문자열 "ef"와 일치하고 /\d(3)|(4)/ 패턴은 세 자리 숫자 중 하나와 일치합니다. 또는 4개의 소문자.

일치하는 항목이 발견될 때까지 대안은 왼쪽에서 오른쪽으로 처리됩니다. 왼쪽 대안과 일치하는 항목이 발견되면 "더 나은" 일치 항목이 달성되더라도 오른쪽 대안은 무시됩니다. 따라서 /a|ab/ 패턴이 문자열 "ab"에 적용되면 첫 번째 문자만 일치합니다.

괄호는 정규식에서 여러 가지 의미를 갖습니다. 그 중 하나는 개별 요소를 하나의 하위 표현식으로 그룹화하여 특수 문자 |, *, +, ?를 사용할 때 요소가 사용되도록 하는 것입니다. 다른 것들은 하나의 전체로 간주됩니다. 예를 들어, /java(script)?/ 패턴은 "java"라는 단어와 그 뒤에 선택적 단어 "script"가 오는 것과 일치하고 /(ab|cd)+|ef)/는 문자열 "ef" 또는 하나 이상의 문자열과 일치합니다. 문자열 "ab" 또는 "cd" 중 하나가 반복됩니다.

정규식에서 괄호를 사용하는 또 다른 방법은 패턴 내의 하위 패턴을 정의하는 것입니다. 대상 문자열에서 정규식 일치 항목이 발견되면 괄호로 묶인 특정 하위 패턴과 일치하는 대상 문자열 부분을 추출할 수 있습니다.

하나 이상의 소문자와 하나 이상의 숫자를 찾고 싶다고 가정해 보겠습니다. 이를 수행하려면 /+\d+/ 템플릿을 사용할 수 있습니다. 하지만 각 경기가 끝날 때의 숫자만 원한다고 가정해 봅시다. 패턴의 이 부분을 괄호(/+(\d+)/) 안에 넣으면 찾은 모든 일치 항목에서 숫자를 추출할 수 있습니다. 이것이 어떻게 수행되는지는 아래에 설명되어 있습니다.

괄호 하위 표현식의 관련 용도는 동일한 정규 표현식의 이전 부분에서 하위 표현식을 참조하는 것입니다. \ 문자 뒤에 하나 이상의 숫자를 지정하면 됩니다. 숫자는 정규식 내에서 괄호로 묶인 하위 표현식의 위치를 ​​나타냅니다. 예를 들어 \1은 첫 번째 하위 표현식을 나타내고 \3은 세 번째 하위 표현식을 나타냅니다. 하위 표현식은 서로 중첩될 수 있으므로 계산할 때 왼쪽 괄호의 위치가 사용됩니다. 예를 들어 다음 정규 표현식에서 중첩된 하위 표현식(cript) 참조는 \2와 같습니다.

/(ava(cript)?)\sis\s(재미\w*)/

이전 하위 표현식에 대한 참조는 해당 하위 표현식의 패턴을 가리키는 것이 아니라 해당 패턴과 일치하는 텍스트를 가리킵니다. 따라서 참조를 사용하여 정확히 동일한 문자가 포함된 문자열 부분을 선택하는 제약 조건을 적용할 수 있습니다. 예를 들어, 다음 정규식은 작은따옴표나 큰따옴표 안에 있는 0개 이상의 문자와 일치합니다. 그러나 여는 따옴표와 닫는 따옴표가 서로 일치할 필요는 없습니다(즉, 두 따옴표가 모두 작은 따옴표이거나 큰 따옴표여야 함).

/[""][^""]*[""]/

다음과 같은 참조를 사용하여 일치하도록 따옴표를 요구할 수 있습니다.

여기서 \1은 첫 번째 하위 표현식과 일치합니다. 이 예에서 링크는 닫는 따옴표가 여는 따옴표와 일치하도록 요구하는 제약 조건을 적용합니다. 이 정규식은 큰따옴표 안에 작은따옴표를 허용하지 않으며 그 반대의 경우도 마찬가지입니다.

해당 요소에 대한 번호가 매겨진 참조를 만들지 않고도 정규식에서 요소를 그룹화할 수도 있습니다. 단순히 (와) 사이에 요소를 그룹화하는 대신 기호(?:로 그룹을 시작하고 기호로 끝냅니다). 예를 들어 다음 패턴을 고려해보세요.

/(ava(?:script)?)\sis\s(재미\w*)/

여기서 하위 표현식(?:cript)은 반복 문자 ?를 그룹에 적용할 수 있도록 그룹화하는 데만 필요합니다. 이러한 수정된 괄호는 링크를 생성하지 않으므로 이 정규식에서 \2는 패턴(fun\w*)과 일치하는 텍스트를 나타냅니다.

다음 표에는 정규식의 선택, 그룹화 및 참조 연산자가 나열되어 있습니다.

JavaScript 선택, 그룹화 및 링크 정규식 기호
상징 의미
| 대안. 왼쪽의 하위 표현식 또는 오른쪽의 하위 표현식과 일치합니다.
(...) 그룹화. 문자 *, +, ?, |와 함께 사용할 수 있는 단일 단위로 요소를 그룹화합니다. 등등. 또한 후속 참조에 사용하기 위해 이 그룹과 일치하는 문자를 기억합니다.
(?:...) 그룹화만 가능합니다. 요소를 단일 단위로 그룹화하지만 해당 그룹에 해당하는 문자를 기억하지 않습니다.
\숫자 그룹 번호 번호를 일치시킬 때 찾은 동일한 문자와 일치합니다. 그룹은 (중첩된) 괄호 안의 하위 표현식입니다. 그룹 번호는 왼쪽 괄호를 왼쪽에서 오른쪽으로 세어 지정됩니다. 기호(?:)를 사용하여 형성된 그룹에는 번호가 매겨지지 않습니다.

일치 위치 지정

앞에서 설명한 것처럼 정규식의 많은 요소는 문자열의 단일 문자와 일치합니다. 예를 들어 \s는 단일 공백 ​​문자와 일치합니다. 다른 정규식 요소는 문자 자체가 아닌 문자 사이의 위치와 일치합니다. 예를 들어, \b는 단어 경계(\w(ASCII 텍스트 문자)와 \W(텍스트가 아닌 문자) 사이의 경계 또는 ASCII 텍스트 문자와 줄의 시작 또는 끝 사이의 경계)와 일치합니다.

\b와 같은 요소는 일치하는 문자열에 있어야 하는 문자를 지정하지 않지만 일치하는 유효한 위치를 지정합니다. 이러한 요소는 문자열의 특정 위치에 패턴을 고정하기 때문에 정규식 앵커 요소라고도 합니다. 가장 일반적으로 사용되는 앵커 요소는 ^ 및 $로, 패턴을 각각 줄의 시작과 끝으로 연결합니다.

예를 들어, 한 줄에 있는 "JavaScript"라는 단어는 정규식 /^JavaScript$/를 사용하여 찾을 수 있습니다. "JavaScript"와 같은 접두사가 아닌 "Java"라는 단일 단어를 찾으려면 단어 앞뒤에 공백이 필요한 /\sJava\s/ 패턴을 사용해 볼 수 있습니다.

그러나 그러한 해결책은 두 가지 문제를 야기합니다. 첫째, 양쪽이 공백으로 둘러싸인 경우에만 "Java"라는 단어를 찾고 줄의 시작이나 끝에서는 찾을 수 없습니다. 둘째, 이 패턴이 일치하면 반환되는 문자열에는 정확히 우리가 원하는 것이 아닌 앞뒤 공백이 포함됩니다. 따라서 공백 문자 \s와 일치하는 패턴을 사용하는 대신 단어 경계 \b와 일치하는 패턴(또는 앵커)을 사용합니다. 결과는 다음 표현식이 됩니다: /\bJava\b/.

앵커 요소 \B는 단어 경계가 아닌 위치와 일치합니다. 즉, 패턴 /\Bcript/는 "JavaScript" 및 "postscript"라는 단어와 일치하지만 "script" 또는 "Scripting"이라는 단어와는 일치하지 않습니다.

임의의 정규 표현식도 앵커 조건으로 사용될 수 있습니다. 문자(?= 및) 사이에 표현식을 배치하면 후속 문자에 대한 정방향 일치 테스트가 되어 해당 문자가 지정된 패턴과 일치하지만 일치 문자열에 포함되지 않아야 합니다.

예를 들어, 뒤에 콜론이 오는 공용 프로그래밍 언어의 이름을 일치시키려면 /ava(cript)?(?=\:)/ 표현식을 사용할 수 있습니다. 이 패턴은 "JavaScript: The Definitive Guide" 문자열의 "JavaScript" 단어와 일치하지만 "Java in a Nutshell" 문자열의 "Java" 단어와는 일치하지 않습니다. 왜냐하면 뒤에 콜론이 없기 때문입니다.

조건(?!)을 입력하면 후속 문자에 대한 부정 전달 검사가 수행되어 다음 문자가 지정된 패턴과 일치하지 않아야 합니다(예: /Java(?!Script)(\w*). )/는 부분 문자열 "Java" 뒤에 부분 문자열 "Script"가 오지 않는 경우, 그 뒤에 대문자와 ASCII 텍스트 문자가 오는 부분 문자열 "Java"와 일치합니다. 그러나 이는 문자열 "JavaBeans"와 일치합니다. "Javanese" 문자열과 일치하지 않으면 "JavaScrip" 문자열과 일치하지만 "JavaScript" 또는 "JavaScripter" 문자열과 일치하지 않습니다.

아래 표에는 정규식 앵커 문자 목록이 나와 있습니다.

정규식 앵커 문자
상징 의미
^ 여러 줄 검색에서 문자열 표현식의 시작 또는 줄의 시작과 일치합니다.
$ 여러 줄 검색에서 문자열 표현식의 끝 또는 줄의 끝과 일치합니다.
\비 단어 경계와 일치합니다. 즉, \w 문자와 \W 문자 사이, 또는 \w 문자와 줄의 시작이나 끝 사이의 위치와 일치합니다. (단, [\b]는 백스페이스 문자와 일치합니다.)
\비 단어 경계가 아닌 위치와 일치합니다.
(?=p) 후속 문자에 대한 긍정적인 예측 검사입니다. 패턴 p와 일치하려면 후속 문자가 필요하지만 일치하는 문자열에 해당 문자를 포함하지 않습니다.
(?!피) 후속 문자에 대한 부정적인 순방향 검사입니다. 다음 문자가 패턴 p와 일치하지 않아야 합니다.

플래그

그리고 정규식 문법의 마지막 요소입니다. 정규식 플래그는 상위 수준 패턴 일치 규칙을 지정합니다. 나머지 정규식 문법과 달리 플래그는 슬래시 문자 사이가 아니라 두 번째 문자 뒤에 지정됩니다. JavaScript는 세 가지 플래그를 지원합니다.

플래그 i패턴 일치에서 대소문자를 구분하지 않도록 지정합니다. 플래그 G- 검색은 전역적이어야 합니다. 즉, 문자열에서 일치하는 모든 항목을 찾아야 합니다. 플래그m여러 줄 모드에서 패턴 검색을 수행합니다. 검색 중인 문자열 표현식에 개행 문자가 포함된 경우 이 모드에서는 앵커 문자 ^ 및 $가 전체 문자열 표현식의 시작과 끝과 일치할 뿐만 아니라 각 텍스트 줄의 시작과 끝과도 일치됩니다. 예를 들어, /java$/im 패턴은 "java" 및 "Java\nis fun"과 모두 일치합니다.

이러한 플래그는 어떤 조합으로도 결합될 수 있습니다. 예를 들어, "java"(또는 "Java", "JAVA" 등)라는 단어가 처음 나타나는 경우 대소문자를 구분하지 않고 검색하려면 대소문자를 구분하지 않는 정규식 /\bjava\b/를 사용할 수 있습니다. 나. 그리고 문자열에서 이 단어가 나타나는 모든 항목을 찾으려면 g 플래그(/\bjava\b/gi)를 추가할 수 있습니다.

패턴으로 검색하기 위한 String 클래스의 메서드

지금까지 우리가 만든 정규식의 문법에 대해 논의했지만 해당 정규식이 실제로 JavaScript 스크립트에서 어떻게 사용될 수 있는지 살펴보지 않았습니다. 이 섹션에서는 패턴 일치 및 대체 검색을 위해 정규식을 사용하는 String 개체의 메서드에 대해 설명합니다. 그런 다음 RegExp 개체와 해당 메서드 및 속성을 살펴보며 정규식을 사용한 패턴 일치에 대한 대화를 계속하겠습니다.

Strings는 정규 표현식을 사용하는 네 가지 방법을 지원합니다. 그 중 가장 간단한 방법은 찾다(). 정규식을 인수로 사용하고 일치하는 하위 문자열의 첫 번째 문자 위치를 반환하거나 일치하는 항목이 없으면 -1을 반환합니다. 예를 들어 다음 호출은 4를 반환합니다.

Var 결과 = "JavaScript".search(/script/i); // 4

search() 메서드에 대한 인수가 정규식이 아닌 경우 먼저 RegExp 생성자에 전달하여 변환됩니다. search() 메소드는 전역 검색을 지원하지 않으며 인수에서 g 플래그를 무시합니다.

방법 바꾸다()검색 및 바꾸기 작업을 수행합니다. 첫 번째 인수로 정규식을 사용하고 두 번째 인수로 대체 문자열을 사용합니다. 이 메서드는 호출된 줄에서 지정된 패턴과 일치하는 항목을 검색합니다.

정규식에 g 플래그가 포함된 경우, replacement() 메서드는 발견된 모든 일치 항목을 대체 문자열로 바꿉니다. 그렇지 않으면 발견된 첫 번째 일치 항목만 대체됩니다. replacement() 메서드의 첫 번째 인수가 정규식이 아닌 문자열인 경우 메서드는 search() 메서드처럼 RegExp() 생성자를 사용하여 문자열을 정규식으로 변환하는 대신 문자열에 대한 리터럴 검색을 수행합니다.

예를 들어, 전체 텍스트 줄에서 "JavaScript"라는 단어를 일관되게 대문자로 표시하기 위해 바꾸기() 메서드를 사용할 수 있습니다.

// 대소문자에 관계없이 필요한 경우에는 단어로 바꿉니다. var result = "javascript".replace(/JavaScript/ig, "JavaScript");

replacement() 메소드는 이 예제에서 제안하는 것보다 더 강력합니다. 정규 표현식 내 괄호 안의 하위 표현식은 왼쪽에서 오른쪽으로 번호가 매겨져 있으며 정규 표현식은 각 하위 표현식에 해당하는 텍스트를 기억한다는 점을 상기시켜 드리겠습니다. 대체 문자열에 $ 기호와 숫자가 포함된 경우, replacement() 메서드는 해당 두 문자를 지정된 하위 표현식과 일치하는 텍스트로 바꿉니다. 이것은 매우 유용한 기능입니다. 예를 들어 문자열의 곧은 따옴표를 ASCII 문자로 시뮬레이션되는 인쇄용 따옴표로 바꾸는 데 사용할 수 있습니다.

// 따옴표는 따옴표(우리가 기억하는)를 제외하고 // 임의의 수의 문자가 오고 그 뒤에 또 다른 따옴표가 오는 것입니다. // var quote = /"([^"]*)"/g; // 활자체로 된 따옴표를 사용하고 "$1"은 변경하지 않고 둡니다. // $1에 저장된 인용문의 내용 var text = ""JavaScript"는 해석된 프로그래밍 언어입니다." var result = text.replace(quote, ""$1"" ) ; // "JavaScript"는 해석된 프로그래밍 언어입니다.

주목해야 할 중요한 점은 replacement()의 두 번째 인수가 대체 문자열을 동적으로 계산하는 함수일 수 있다는 것입니다.

방법 성냥()정규식을 사용하는 가장 일반적인 String 클래스 메서드입니다. 정규식을 유일한 인수로 사용하거나 해당 인수를 RegExp() 생성자에 전달하여 해당 인수를 정규식으로 변환하고 검색 결과가 포함된 배열을 반환합니다. 정규식에 g 플래그가 설정된 경우 메서드는 문자열에 있는 모든 일치 항목의 배열을 반환합니다. 예를 들어:

// ["1", "2", "3"]을 반환합니다. var result = "1 더하기 2는 3입니다.".match(/\d+/g);

정규식에 g 플래그가 포함되어 있지 않으면 match() 메서드는 전역 검색을 수행하지 않습니다. 단지 첫 번째 일치 항목을 찾습니다. 그러나 match()는 메서드가 전역 검색을 수행하지 않는 경우에도 배열을 반환합니다. 이 경우 배열의 첫 번째 요소는 발견된 하위 문자열이고 나머지 모든 요소는 정규식의 하위 표현식입니다. 따라서 match()가 배열 arr을 반환하면 arr에는 발견된 전체 문자열이 포함되고 첫 번째 하위 표현식에 해당하는 하위 문자열이 arr됩니다. replacement() 메소드와 유사하게 $n의 내용이 arr[n]에 입력된다고 말할 수 있습니다.

예를 들어, URL을 구문 분석하는 다음 코드를 살펴보세요.

Var url = /(\w+):\/\/([\w.]+)\/(\S*)/; var text = "저희 웹사이트 http://www..php를 방문하세요"; var 결과 = text.match(url); if (result != null) ( var fullurl = result; // "http://www..php" 포함 var 프로토콜 = result; // "http" 포함 var host = result; // "www..php" 포함 " )

전역 검색 플래그 g가 설정되지 않은 정규식의 경우 match() 메서드는 정규식의 exec() 메서드와 동일한 값을 반환합니다. 반환된 배열에는 설명된 대로 인덱스 및 입력 속성이 있습니다. 아래 exec( )에 대한 논의에서.

정규식을 사용하는 마지막 String 개체 메서드는 다음과 같습니다. 나뉘다(). 이 메서드는 인수를 구분 기호로 사용하여 호출되는 문자열을 하위 문자열 배열로 분할합니다. 예를 들어:

"123,456,789".split(","); // ["123","456","789"]를 반환합니다.

Split() 메서드는 정규식을 인수로 사용할 수도 있습니다. 이는 방법을 더욱 강력하게 만듭니다. 예를 들어, 양쪽에 임의 개수의 공백 문자를 허용하는 구분 기호를 지정할 수 있습니다.

"1, 2, 3, 4, 5".split(/\s*,\s*/); // ["1","2","3","4","5"]를 반환합니다.

RegExp 객체

앞서 언급했듯이 정규식은 RegExp 개체로 표현됩니다. RegExp() 생성자 외에도 RegExp 개체는 세 가지 메서드와 여러 속성을 지원합니다.

RegExp() 생성자는 하나 또는 두 개의 문자열 인수를 사용하여 새 RegExp 개체를 만듭니다. 생성자의 첫 번째 인수는 정규식의 본문을 포함하는 문자열입니다. 정규식 리터럴에서 슬래시 문자 사이에 나타나야 하는 텍스트입니다. 문자열 리터럴과 정규 표현식은 \ 문자를 사용하여 이스케이프 시퀀스를 나타내므로 정규 표현식을 문자열 리터럴로 RegExp() 생성자에 전달할 때 각 \ 문자를 \\ 문자 쌍으로 바꿔야 합니다.

RegExp()에 대한 두 번째 인수가 누락되었을 수 있습니다. 지정된 경우 정규식 플래그를 정의합니다. g, i, m 문자 중 하나이거나 이들 문자의 조합이어야 합니다. 예를 들어:

// 문자열에서 다섯 자리 숫자를 모두 찾습니다. 참고 // 이 예에서는 기호를 사용합니다. \\ var zipcode = new RegExp("\\d(5)", "g");

RegExp() 생성자는 정규식이 동적으로 생성되어 정규식 리터럴 구문을 사용하여 표현할 수 없는 경우에 유용합니다. 예를 들어, 사용자가 입력한 문자열을 찾으려면 런타임에 RegExp()를 사용하여 정규식을 만들어야 합니다.

정규식 속성

각 RegExp 개체에는 5개의 속성이 있습니다. 재산 원천- 정규식의 텍스트를 포함하는 읽기 전용 문자열입니다. 재산 글로벌 g 플래그가 정규식에 있는지 여부를 지정하는 읽기 전용 부울 값입니다. 재산 대소문자 무시 i 플래그가 정규식에 있는지 여부를 결정하는 읽기 전용 부울 값입니다. 재산 여러 줄 m 플래그가 정규식에 있는지 여부를 결정하는 읽기 전용 부울 값입니다. 그리고 마지막 부동산 마지막 인덱스읽고 쓸 수 있는 정수입니다. g 플래그가 있는 패턴의 경우 이 속성에는 다음 검색이 시작되어야 하는 줄의 위치 번호가 포함됩니다. 아래에 설명된 대로 exec() 및 test() 메서드에서 사용됩니다.

RegExp 메서드

RegExp 개체는 패턴 일치를 수행하는 두 가지 메서드를 정의합니다. 위에서 설명한 String 클래스 메서드와 유사하게 동작합니다. 패턴 매칭에 사용되는 RegExp 클래스의 주요 메소드는 다음과 같습니다. 실행(). RegExp 인수를 사용하는 String 클래스 메서드가 아니라 문자열을 인수로 사용하는 RegExp 클래스 메서드라는 점을 제외하면 앞서 언급한 String 클래스의 match() 메서드와 유사합니다.

exec() 메소드는 지정된 문자열에 대해 정규식을 실행합니다. 문자열에서 일치하는 항목을 찾습니다. 일치하는 항목이 없으면 메서드는 null을 반환합니다. 그러나 일치하는 항목이 발견되면 g 플래그 없이 검색하기 위해 match() 메서드에서 반환된 배열과 동일한 배열을 반환합니다. 배열의 0 요소에는 정규식과 일치하는 문자열이 포함되고 모든 후속 요소에는 모든 하위 표현식과 일치하는 하위 문자열이 포함됩니다. 게다가 부동산은 색인해당 조각이 시작되는 문자의 위치 번호와 속성을 포함합니다. 입력검색된 행을 나타냅니다.

match()와 달리 exec() 메서드는 정규식의 g 플래그 존재 여부에 따라 구조가 달라지지 않는 배열을 반환합니다. 전역 정규식을 전달할 때 match() 메서드는 찾은 일치 항목의 배열을 반환한다는 점을 상기시켜 드리겠습니다. 그리고 exec()는 항상 하나의 일치 항목을 반환하지만 이에 대한 완전한 정보를 제공합니다. g 플래그가 포함된 정규식에 대해 exec()가 호출되면 해당 메서드는 정규식 개체의 lastIndex 속성을 발견된 하위 문자열 바로 다음 문자의 위치 번호로 설정합니다.

exec()가 동일한 정규 표현식에서 두 번째 호출되면 lastIndex 속성에 지정된 위치의 문자에서 검색을 시작합니다. exec()가 일치 항목을 찾지 못한 경우 lastIndex 속성은 0으로 설정됩니다. (언제든지 lastIndex를 0으로 설정할 수도 있습니다. 이는 단일 행의 마지막 일치 항목이 검색되기 전에 검색이 끝나는 모든 경우에 수행되어야 합니다. 발견되면 동일한 RegExp 객체가 있는 다른 줄에서 검색이 시작됩니다.) 이 특별한 동작을 통해 exec()를 반복적으로 호출하여 해당 줄의 정규식과 일치하는 모든 항목을 반복할 수 있습니다. 예를 들어:

Var 패턴 = /Java/g; var text = "JavaScript는 Java보다 더 재미있습니다!"; var 결과; while((result = Pattern.exec(text)) != null) ( console.log("Found "" + result + """ + " at position " + result.index + "; 다음 검색은 " + 패턴 .lastIndex);

RegExp 개체의 또 다른 방법은 다음과 같습니다. 시험(), 이는 exec() 메서드보다 훨씬 간단합니다. 문자열을 가져와 문자열이 정규식과 일치하면 true를 반환합니다.

Var 패턴 = /java/i; 패턴.테스트("자바스크립트"); // 참을 반환

test()를 호출하는 것은 exec()를 호출하는 것과 같습니다. exec()가 null이 아닌 다른 것을 반환하면 true를 반환합니다. 이러한 이유로 test() 메서드는 전역 정규식에서 호출될 때 exec() 메서드와 동일한 방식으로 동작합니다. 즉, lastIndex 속성에 지정된 위치에서 지정된 문자열 검색을 시작하고 일치하는 문자열을 찾으면 , lastIndex 속성을 찾은 일치 항목 바로 옆의 문자 위치 번호로 설정합니다. 따라서 test() 메소드를 사용하면 exec() 메소드를 사용하는 것과 동일한 방식으로 라인 순회 루프를 생성할 수 있습니다.

마지막 업데이트: 2015년 11월 1일

정규 표현식문자열을 검색하거나 수정하는 데 사용되는 패턴을 나타냅니다. JavaScript에서 정규식을 사용하려면 객체가 정의됩니다. 정규식.

정규식을 정의하는 방법에는 두 가지가 있습니다.

Var myExp = /hello/; var myExp = new RegExp("hello");

여기에 사용된 정규식은 매우 간단합니다. "hello"라는 한 단어로 구성됩니다. 첫 번째 경우 표현식은 두 개의 슬래시 사이에 배치되고, 두 번째 경우에는 표현식이 문자열로 전달되는 RegExp 생성자가 사용됩니다.

RegExp 메서드

정규식이 문자열과 일치하는지 확인하기 위해 RegExp 개체는 test() 메서드를 정의합니다. 이 메서드는 문자열이 정규식과 일치하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

VarinitialText = "안녕하세요!"; var exp = /안녕하세요/; var 결과 = exp.test(initialText); document.write(결과 + "
"); // trueinitialText = "beautifull whither"; result = exp.test(initialText); document.write(result); // false -initialText 줄에 "hello"가 없습니다.

exec 메소드는 비슷한 방식으로 작동합니다. 또한 문자열이 정규 표현식과 일치하는지 확인합니다. 이제 이 메소드는 표현식과 일치하는 문자열 부분을 반환합니다. 일치하는 항목이 없으면 null이 반환됩니다.

VarinitialText = "안녕하세요!"; var exp = /안녕하세요/; var 결과 = exp.exec(initialText); document.write(결과 + "
"); // 안녕하세요initialText = "beautifull whither"; result = exp.exec(initialText); document.write(result); // null

캐릭터 그룹

정규식은 반드시 정규 문자열로 구성될 필요는 없지만 정규식 구문의 특수 요소를 포함할 수도 있습니다. 그러한 요소 중 하나는 대괄호로 묶인 문자 그룹으로 표시됩니다. 예를 들어:

VarinitialText = "방어력"; var exp = /[abc]/; var 결과 = exp.test(initialText); document.write(결과 + "
"); // trueinitialText = "city"; result = exp.test(initialText); document.write(result); // false

[abc] 표현식은 문자열이 세 글자 중 하나를 포함해야 함을 나타냅니다.

문자열의 특정 범위에 있는 알파벳 문자가 있는지 확인해야 하는 경우 이 범위를 한 번만 지정할 수 있습니다.

VarinitialText = "방어력"; var exp = /[a-z]/; var 결과 = exp.test(initialText); document.write(결과 + "
"); // trueinitialText = "3di0789"; result = exp.test(initialText); document.write(result); // false

이 경우 문자열에는 a-z 범위의 문자가 하나 이상 포함되어야 합니다.

반대로 행에 특정 문자만 포함하지 않으려면 문자를 나열하기 전에 대괄호 안에 ^ 기호를 넣어야 합니다.

VarinitialText = "방어력"; var exp = /[^a-z]/; var 결과 = exp.test(initialText); document.write(결과 + "
"); // 거짓initialText = "3di0789"; exp = /[^0-9]/; result = exp.test(initialText); document.write(result); // true

첫 번째 경우에는 문자열에 a-z 범위의 문자만 있어서는 안 되지만 "defensiveness" 문자열은 이 범위의 문자로만 구성되므로 test() 메서드는 false를 반환합니다. 즉, 정규식이 일치하지 않습니다. 물을 빼다.

두 번째 경우("3di0789")의 경우 문자열은 숫자로만 구성되어서는 안 됩니다. 그러나 문자열에는 문자도 포함되어 있으므로 문자열은 정규식과 일치하므로 테스트 메서드는 true를 반환합니다.

필요한 경우 표현식 조합을 수집할 수 있습니다.

VarinitialText = "집"; var exp = /[dt]o[nm]/; var 결과 = exp.test(initialText); document.write(결과); // 진실

[dt]o[nm] 표현식은 "house", "volume", "don", "tone" 하위 문자열을 포함할 수 있는 행을 나타냅니다.

식 속성

    전역 속성을 사용하면 정규식과 일치하는 모든 하위 문자열을 찾을 수 있습니다. 기본적으로 하위 문자열을 검색할 때 정규식은 문자열에서 표현식과 일치하는 첫 번째 하위 문자열을 선택합니다. 문자열에는 표현식과 일치하는 하위 문자열이 많이 있을 수 있습니다. 이를 수행하려면 표현식에서 기호 g의 형태로 이 속성을 사용하십시오.

    ignoreCase 속성을 사용하면 문자열의 문자 대소문자에 관계없이 정규식과 일치하는 하위 문자열을 찾을 수 있습니다. 이를 위해 정규식에 문자 i를 사용합니다.

    multiline 속성을 사용하면 여러 줄 텍스트의 정규식과 일치하는 하위 문자열을 찾을 수 있습니다. 이를 위해 정규식에 m 기호를 사용합니다.

예를 들어:

VarinitialText = "hello World"; var exp = /세계/; var 결과 = exp.test(initialText); // 거짓

여기서는 "World"가 "world"와 대소문자가 다르기 때문에 문자열과 표현식 사이에 일치하는 항목이 없습니다. 이 경우에는ignoreCase 속성을 추가하여 정규식을 변경해야 합니다.

Var exp = /world/i;

글쎄, 우리는 한 번에 여러 속성을 사용할 수도 있습니다.