도움말
인텔리퀀트의 사용방법과 메뉴얼입니다.

4. 정규식

정규식 만들기

정규식은 두 가지 방법으로 만들 수 있습니다 :

- 다음과 같이 정규식 리터럴을 사용한다 :

var  Re = / ab + c /;

정규식 리터럴은 스크립트가 평가 될 때 그 정규 표현을 컴파일 합니다. 정규식이 constant로 유지된다면 이 방법을 사용하는 것이 성능을 얻을 수 있습니다.

- 다음과 같이 RegExp 객체의 생성자 함수를 호출한다. :

var  Re = New  RegExp ( "ab + c" );

생성자 함수를 사용하여 런타임에 정규 표현식을 컴파일합니다. 정규식 패턴이 바뀔 수 있거나 패턴을 모르는 경우, 사용자가 입력하는 등 다른 소스에서 패턴을 검색 할 경우, 생성자 함수를 사용합니다.

정규식 패턴 작성

정규식 패턴은 /abc/ 와 같은 단순 문자 나 /ab*c/ 과 /Chapter (\d+)\\d* / 와 같은 단순 문자와 특수 문자의 조합으로 구성됩니다. 이 섹션의 마지막 예제에서는 메모리 장치로 사용되는 괄호가 포함되어 있습니다. 패턴이 일부분에서 일치하는 항목은 나중에 사용할 수 있도록 저장됩니다. 자세한 내용은 괄호로 둘러싸인 substring 매치 사용 을 참조하십시오.

간단한 패턴 사용

단순한 패턴은 직접 일치하는 부분을 찾는 문자로 구성됩니다. 예를 들어 /abc/ 패턴은 실제로 'abc'라는 문자가 함께 그 순서로 존재하는 경우에만 문자열의 문자 조합과 일치합니다. "Hi, do you know your abc 's?"나 "The latest airplane designs evolved from slabcraft."라는 문자열에서 매칭은 성공합니다. 두 경우 모두 'abc'라는 부분 문자열과 일치합니다. "Grab crab"라는 문자열은 'abc'라는 부분 문자열이 포함되어 있지 않기 때문에 일치하지 않습니다.

특수 문자 사용

하나 이상의 b를 찾거나 공백을 찾는 것과 복잡한 검색을 할 때는, 직접 매칭보다 고급 매칭의 검색 패턴에 특수 문자를 사용합니다. 예를 들어 /ab*c/ 패턴에서는 하나의 'a'와 그 뒤로 계속되는 0 개 이상의 'b' (여기서 '*' 는 바로 앞의 문자가 0 개 이상이라는 것을 의미합니다), 그리고 뒤에 계속 'c'로 구성된 문자 조합과 일치합니다. "cbbabbbbcdebc"라는 문자열이 패턴은 'abbbbc'라는 부분 문자열과 일치합니다.

다음 표에서 정규 표현식에서 사용할 수있는 특수 문자와 그 의미를 설명합니다.

표 4.1 : 정규 표현식의 특수 문자

문자 의미
\ 다음 중 하나 :
일반적으로 문자 그대로 처리되는 문자에 대해 다음 문자는 특수이며 문자 그대로 해석해서는 아니라고 지시합니다.
예를 들어 /b/ 는 문자 'b'와 일치합니다. /\b/ 와 같이 b 앞에 역 슬래시가 오면 그 문자는 단어 경계와 일치하는 것을 의미하는 특수 문자입니다.
일반적으로 특수 문자로 처리되는 문자에 대해 다음 문자는 특수 아니라 문자 그대로 해석해야 한다는 것을 의미합니다.
예를 들어 * 는 이전 항목 뒤에 선행문자가 0 개 이상 것을 의미하는 특수 문자입니다. 예를 들어 /a*/ 는 0 개 이상의 문자가 a 뒤에 매칭되는 것을 의미합니다. * 는 문자 그대로 일치 시키려면, 그 앞에 백 슬래시를 놓습니다. 예를 들어 /a\*/ 는 'a*'와 매칭 됩니다.
또한 \도 문자열에서 이스케이프 문자이기 때문에, 새로운 RegExp ( "pattern")를 작성할 때 \ 자신도 이스케이프 해야 합니다.
^

입력의 맨 앞에 매칭 됩니다. 여러 줄 플래그가 true로 설정되어있는 경우, 줄바꿈 이후에도 매치합니다.

예를 들어 /^A/ 는 "an A"에 있는 'A'와 일치하지 않지만 "An E"에 있는 'A'와 일치합니다.

이 문자는 문자 집합 패턴의 맨 앞에 있는 경우는 다른 의미를 가집니다.

예 /[^a-z\s]/ 는 "I have 3 sisters"의 '3 '과 일치합니다.

$

입력의 끝과 매칭 됩니다. 여러 줄 플래그가 true로 설정되어있는 경우, 줄바꿈 직전에 매치합니다.

예를 들어 /t$/ 는 "eater"에 있는 't'와 일치하지 않지만 "eat"에 있는 't'와 일치합니다.

*

앞의 문자가 0 번 이상 일치합니다.

예를 들어 /bo*/ 는 "A ghost booooed"의 'boooo'나 'A bird warbled "에 있는 'b'와 일치하지만 "A goat grunted"에서는 일치하지 않습니다.

+

앞의 문자가 1 번 이상 일치합니다. {1,}와 같습니다.

예를 들어 /a+/ 는 "candy"의 'a'와 "caaaaaaandy"모든 a와 일치합니다.

?

앞의 문자가 0 번 또는 1 번만 일치합니다. {0,1}과 같습니다.

예를 들어 /e?le?/ 는 "angel"의 'el'와 일치하고, "angle"의 'le', 그리고 'oslo "의'l '와 일치합니다.

*, +, ?, {} 같은 quantifier 바로 다음에 사용하면 그 quantifier를 non-greedy(최소 횟수와 일치) 하게 합니다. 이것은 디폴트와는 반대이며, 기본값은 greedy (최대 횟수와 일치)입니다. 예를 들어 /\d+/는 비 글로벌 매칭에서 "123abc"의 "123"에 매치하지만, /\d+?/의 경우 "1"에만 매치합니다.

이것은 앞 표현에서 사용할 수 있으며 이 테이블의 x (? = y) 및 x (?! y)에서 설명합니다.

.

(소수점) 줄바꿈 문자를 제외한 모든 하나의 문자(single character)와 일치합니다.

예를 들어 /.n/ 은 "nay, an apple is on the tree"에서 'an'그리고 'on'과 일치하지만, 'nay'와 일치하지 않습니다.

(x)

'x'와 일치하고 일치하는 내용을 기억합니다. 이것은 캡처 괄호라고 합니다.

예를 들면 /(foo)/ m는 "foo bar"의 'foo'와 일치하고 이를 저장합니다. 일치하는 부분 문자열은 결과로 생성 된 배열의 요소 [1] , ..., [n] 에서 호출 할 수 있습니다.

(?:x) 'x'와 일치하고 있지만, 매칭 내용은 기억하지 않습니다. 이것은 캡처하지 않는 괄호라고 합니다. 일치하는 부분 문자열을 결과로 생성 된 배열의 요소 [1] , ..., [n] 에서 호출 할 수 없습니다.
x(?=y)

'x'에 'y'가 계속되는 경우에만 'x'와 일치합니다. 이것은 lookahead라고 합니다.

예를 들어 /Jack(?=Sprat)/ 는 'Jack' 뒤에 'Sprat'가 나오는 경우에만 'Jack'과 일치합니다. /Jack(?=Sprat|Frost)/ 는 'Jack'뒤에 'Sprat'또는 'Frost'가 계속되는 경우에만 'Jack'과 일치합니다. 그러나 'Sprat'도 'Frost'도 매칭 결과에 나타나지 않습니다.

x(?!y)

'x' 다음에 'y'가 나오지 않는 경우에만 'x'와 일치합니다. 이것은 negated lookahead 라고 합니다.

예를 들어 /\d+(?!\.)/ 는 뒤에 소수점이 따르지 않는 숫자와 일치합니다. 정규식 /\d+(?!\.)/.exec ("3.141") 는 '141'과 일치하지만 '3.141'와 일치하지 않습니다.

x|y 'x'또는 'y'와 일치합니다.

예를 들어 /green|red/ 는 "green apple"의 'green'과 'red apple"의 'red '와 일치합니다.

{n}

n 은 양의 정수가 들어 있다면, 선행 문자가 n 번 있는 경우 일치합니다.

예를 들어 /a{2}/ 는 "candy"의 'a'와 일치하지 않지만 "caaandy"의 첫 두 a와 일치합니다.

{n, m}

n 및 m 은 양의 정수가 들어 있습니다. 앞의 문자가 최소 n 번, 많아도 m 회 발생과 일치합니다.

n 또는 m 이 0이면, 그것을 생략 할 수 있습니다.

예를 들어 /a{1,3}/ 는 "cndy"에서는 일치하지 않고, "candy"의 'a', "caandy"의 첫 글자 'a', "caaaaaaandy"의 처음 세 개의 a와 일치 있습니다. "caaaaaaandy"에서는 원래 문자열에 a가 4 개 있습니다 만, 일치는 "aaa"임을 주의하십시오.

[xyz]

문자의 집합입니다. 둘러싸인 문자 중 하나와 일치합니다. 하이픈을 사용하여 문자 범위를 지정할 수 있습니다. 문자 집합 내에서 특수 문자 (예 : 점 ( . ) 및 별표 ( * ))는 특별한 의미가 없습니다. 그 이스케이프는 불필요합니다. 이스케이프 시퀀스에서도 작동합니다.

예를 들어 [abcd] 는 [ad] 와 동일합니다. 이것은 "brisket"의 'b'와 'city'의 'c'와 일치합니다. /[az]+/ 그리고 /[\w]+/ 모두 "test.i.ng" 과 일치합니다.

[^xyz]

문자 집합의 부정 또는 부정입니다. 대괄호 않은 것에 일치합니다. 하이픈을 사용하여 문자 범위를 지정할 수 있습니다. 일반 문자 집합에서 작동하는 모든 것을 이곳에서도 작동합니다.

예를 들어 [^abc] 는 [^ac] 와 동일합니다. 이것은 시작에 "brisket"의 'r' 그리고 "chop"의 'h'와 일치합니다.

[\b] 백스페이스 (U+0008)와 일치합니다. ( \b 와 혼동해서는 안됩니다.)

\b

단어 경계와 일치합니다. 단어의 구분은 단어 문자 앞이나 뒤에 다른 단어 문자가 없는 위치에 일치합니다. 일치하는 단어의 구분은 일치하는 부분에 포함되지 않는 점에 유의하십시오. 즉, 일치하는 단어를 구분 길이는 0입니다. ( [\b] 와 혼동해서는 안됩니다.)

예 : /\bmoo/ 는 "moon"의 'm'과 일치합니다. /oo\b/ 는 "moon"의 'oo'와 일치하지 않습니다. 이것은 'oo'뒤에 단어 문자인 'n' 이 있기 때문입니다. /oon\b/ 는 "moon"의 'oon'와 일치합니다. 이것은 'oon'가 문자열의 끝이기 때문입니다. /\w\b\w/ 는 매칭이 불가능한 조건입니다. 단어 문자 뒤에 비 단어 문자와 단어 문자가 올 수 없기 때문입니다.

\B

단어의 구분이 아닌 문자와 일치합니다. 이것은 이전의 문자 뒤에 문자가 같은 종류인 위치와 일치합니다. 즉 두 단어이거나 모두 낱말없는 상황입니다. 문자열의 시작과 끝은 단어는 없다고 생각합니다.

예를 들어 /\B../ 는 "noonday"의 'oo'에 /y\B./ 는 "possibly yesterday"의 'ye'와 일치합니다.

\CX

X 는 A에서 Z 중 1 문자입니다. 문자열의 제어 문자와 일치합니다.

예를 들어 /\cM/ 는 문자열의 control-M (U +000 D)과 일치합니다.

\d

숫자와 일치합니다. [0-9] 와 같습니다.

예를 들어 /\d/ 와 /[0-9]/ 는 "B2 is the suite number"의 '2 '와 일치합니다.

\D

숫자가 아닌 문자와 일치합니다. [^0-9] 와 같습니다.

예를 들어 /\D/ 나 /[^0-9]/ 는 "B2 is the suite number"의 'B'와 일치합니다.

\f 페이지 나누기 (U +000 C)와 일치합니다.
\n 줄 바꿈 (U +000 A)과 일치합니다.
\r 복귀 (U +000 D)와 일치합니다.
\s

공백, 탭, 페이지 나누기, 줄 바꿈을 포함하는 하나의 공백 문자와 일치합니다. [\f\n\r\t\v\u00A0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u2028\u2029\u202f\u205f\u3000] 와 같습니다.

예를 들어 /\s\w*/ 는 "foo bar"의 'bar'와 일치합니다.

\S

공백이 아닌 문자와 일치합니다. [^\f\n\r\t\v\u00A0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u2028\u2029\u202f\u205f\u3000] 와 같습니다.

예를 들어 /\S\w*/ 는 "foo bar"의 'foo'와 일치합니다.

\t 탭 (U +0009)와 일치합니다.
\v 수직 탭 (U +000 B)과 일치합니다.
\w

밑줄을 포함한 모든 숫자와 일치합니다. [A-Za-z0-9_] 와 같습니다.

예를 들어 /\w/ 는 "apple"의 'a'와 '$ 5.28'의 '5 '그리고 "3D"에서는 '3'과 일치합니다.

\W

위 이외의 문자와 일치합니다. [^A-Za-z0-9_] 와 같습니다.

예를 들어 /\W/ 나 / [^A-Za-z0-9_] / 는 "50 %"의 '%'와 일치합니다.

\n

n 은 양의 정수가 들어 있습니다. 정규식에서 n 번째 괄호 부분과 일치하는 마지막 부분 문자열에 대한 역 참조입니다 (왼쪽 괄호를 계산합니다).

예를 들어 /apple(,)\sorange\1/ 는 "apple, orange, cherry, peach"의 'apple, orange'와 일치합니다.

\0 NULL (U +0000) 문자와 일치합니다. 이 뒤에 다른 숫자가 나오면 안됩니다. 이것은 \0 <digits> 가 8 진수 이스케이프 시퀀스이기 때문입니다.
\xhh hh (2 자리 16 진수) 코드를 가진 문자열과 일치한다.
\\uhhhh hhhh (4 자리 16 진수) 코드를 가진 문자열과 일치한다.

괄호 사용

정규식 패턴의 일부를 괄호로 묶으면, 일치하는 부분 문자열을 기억할 수 있습니다. 한 번 기억하면 나중에 그 부분 문자열을 회수 할 수 있습니다. 이것에 관해서는 괄호로 둘러싸인 부분 문자열 성냥 사용 에서 설명하고 있습니다.

예를 들어 /Chapter (\d+)\\d* / 패턴에서는 이스케이프 된 문자와 특수 문자를 추가하고, 그 부분을 기억하도록 지시하고 있습니다. 이것은 'Chapter'문자열, 연속 1 자 이상의 숫자 (\d는 숫자 중 하나를, + 는 1 회 이상의 반복을 의미합니다), 연속 소수점 (자체 특수 문자이고 소수점 앞에 \는 패턴이 '.'문자 자체를 찾는 것을 의미합니다), 연속 0 자 이상의 숫자 (\d 는 숫자를, * 는 0 번 이상 반복을 의미 합니다)과 일치합니다. 또한 괄호를 사용해서 먼저 일치하는 번호를 기억합니다.

이 패턴은 "Open Chapter 4.3, paragraph 6"라는 문자열에서 발견되고 '4 '가 기억됩니다. 이 패턴은 "Chapter 3 and 4"에서 찾을 수 없습니다. 이 문자열은 '3 '뒤에 마침표가 없기 때문입니다.

매치 한 부분을 기억하지 않고도 부분 문자열에 매칭 시키고 싶은 경우는 괄호에서 패턴 앞에 ? : 를 클릭하십시오. 예를 들어 (? : \ d +) 는 1 자 이상의 숫자와 일치하지만 일치하는 문자열은 기억하지 않습니다.

정규식 사용

정규식 RegExp 의 test 및 exec 메서드 String 의 match , replace , search , 및 split 메소드와 함께 사용합니다. 이러한 방법의 자세한 내용은 JavaScript 참조 로 설명하고 있습니다.

표 4.2 : 정규식을 사용하는 방법

메소드 설명
exec 문자열에서 일치하는 항목을 검색하는 RegExp 메소드. 결과 정보의 배열을 돌려줍니다.
test 문자열에서 일치하는 항목이 있는지를 테스트하는 RegExp 메소드. true 또는 false를 반환합니다.
match 문자열에서 일치하는 항목이 있는지를 테스트하는 String 메소드. 일치하는 위치의 인덱스를 돌려줍니다. 검색에 실패한 경우는 -1을 돌려줍니다.
sea​​rch 문자열에서 일치하는 항목이 있는지를 테스트하는 String 메소드. 일치하는 위치의 인덱스를 돌려줍니다. 검색에 실패한 경우는 -1을 돌려줍니다.
replace 문자열에서 일치하는 항목을 검색하고 일치하는 부분 문자열을 다른 부분 문자열로 대체하는 String 개체입니다.
split 정규식 또는 고정 문자열을 이용해 문자열을 분할하고 부분 문자열 배열에 넣는 String 메소드. 있는 패턴이 문자열에 있는지를 알고 싶을 때는, test 또는 search 메서드를 사용하십시오. 자세한 정보를 알고 싶다면 (실행 시간이 오래 걸리지 만) exec 또는 match 메소드를 사용하십시오. exec 와 match 를 사용하여 일치가 성공하면이 메서드는 배열을 반환하고 또한 결합 된 정규식 개체로 정의 된 개체이다 RegExp 개체의 속성을 업데이트합니다. 매치가 실패하면 exec 메소드는 null ( false 로 변환합니다)를 돌려줍니다.

다음 예제에서는 exec 메서드를 사용하여 문자열을 검색합니다.

var  myRe = / d (b +) d / g;
var  myArray = myRe.exec ( "cdbbdbsbz" );

정규식 속성에 액세스 할 필요가 없는 경우는 다음 스크립트가 myArray 를 만드는 다른 방법입니다 :

var  myArray = / d (b +) d / g.exec ( "cdbbdbsbz" );

있는 문자열에서 정규식을 조립하려면 다음 스크립트와 같은 방법이 있습니다 :

var  myRe = New  RegExp ("d(b+)d" , "g" );
var  myArray = myRe.exec ( "cdbbdbsbz" );

이러한 스크립트는 비교가 성공하고, 배열을 반환하고 다음 표에 표시된 속성을 업데이트합니다.

표 4.3 : 정규식 결과

객체 속성 또는 인덱스 설명 예제
myArray 매치 한 문자열과 모든 기억 된 부분 문자열입니다. [ "dbbd", "bb"]
index 입력 문자열에서 일치하는 위치를 나타내는 0부터 시작하는 인덱스입니다. 1
input 원래 문자열입니다. "cdbbdbsbz"
[0] 마지막에 매치 한 문자열입니다. "dbbd"
myRe lastIndex 다음 경기가 시작되는 인덱스입니다. (이 속성은 g 옵션을 사용하는 정규 표현식에서만 설정됩니다.이 플래그를 이용한 고급 검색 에서 설명합니다.) 5
source 패턴의 텍스트입니다. 정규식 런타임 없이 만들 때 업데이트됩니다. "d (b +) d"

이 예제의 두 번째 형식에서 볼 수 있듯이 개체 이니셜 라이저를 사용하여 변수에 할당하지 않고 정규 표현식을 사용할 수 있습니다. 그러나이 방법에서는 출현하는 패턴이 모든 다른 정규식으로 만들어집니다. 따라서 변수에 할당하지이 형식을 사용하는 경우, 정규 표현식의 속성에 나중에 액세스 할 수 없습니다. 예를 들어, 다음과 같은 스크립트를 사용합니다 :

var  myRe = / d (b +) d / g;
var  myArray = myRe.exec ( "cdbbdbsbz" );
console.log ( "The value of lastIndex is"  + myRe.lastIndex);

이 스크립트는 다음과 같이 출력합니다 :

The value of lastIndex is 5

그러나 이 스크립트의 경우 :

var  myArray = / d (b +) d / g.exec ( "cdbbdbsbz" );
console.log ( "The value of lastIndex is"  + / d (b +) d / g.lastIndex);

다음과 같이 출력합니다 :

The value of lastIndex is 0

이 두 문장에 있는 /d(b+)d/g 다른 정규식 개체이며, 따라서 각각의 lastIndex 속성 값도 다른 것입니다. 개체 이니셜라이저 통한 정규 표현의 속성에 액세스해야하는 경우, 먼저 그것을 변수에 할당하도록합니다.

괄호로 둘러싸인 부분 문자열 매칭 사용

정규식 패턴에 괄호를 포함하여 해당 하위 일치 항목이 기억됩니다. 예를 들어 /a(b)c/ 는 'abc'라는 문자열과 일치하고 'b'가 기억됩니다. 이 괄호로 둘러싸인 부분 문자열 일치는 Array 의 요소 [1] , ..., [n] 를 사용하여 회수 할 수 있습니다.

괄호로 둘러싸인 부분 문자열은 제한이 없습니다.. 반환 된 배열은 발견 된 모든 것이 존재합니다. 다음 예제에서는 괄호로 둘러싸인 부분 문자열 사용법을 설명합니다.

예 1
다음 스크립트는 replace () 메서드를 사용하여 문자열의 단어를 맞 바꿉니다. 텍스트 대체를 위해 스크립트에서 $1 과 $2 를 사용하여 처음과 다음 괄호로 둘러싸인 부분 문자열 일치를 보여줍니다.

var  Re = /(\w+)\s(\w+)/;
var  str = "John Smith" ;
var  newstr = str.replace (re, "$ 2, $ 1" );
console.log (newstr);

이것은 "Smith, John"을 출력합니다.

플래그를 이용한 고급 검색

정규식에 전역 검색 또는 대 / 소문자를 구별하지 않는 검색을 가능하게 하는 4 개의 옵션 플래그가 있습니다. 글로벌 검색하려면, g 플래그를 사용하십시오. 대소 문자를 구별하지 않으려면, i 플래그를 사용하십시오. 각 줄 · 줄에 맞추기 위해 m 플래그를 사용 하십시오. "sticky"검색 하려면 y 플래그를 사용하십시오. 이 검색 대상 문자열의 현재 위치에서 시작합니다. 이러한 플래그는 단독으로 사용할 수도 함께 사용할 수 있습니다. 순서는 상관 없습니다. 플래그는 일반 표현식의 일부로 포함됩니다.

플래그를 정규 표현에 포함하려면 다음과 같이하십시오 :

var  Re = /pattern/flags;

또는

var  Re = New  RegExp ( "pattern" , "flags" );

플래그는 일반 표현식의 불가분의 일부임을 주의하십시오. 나중에 추가하거나 제거 할 수 없습니다.

예 re = /\w+\s/g 는 하나 이상의 문자와 연속적인 공간을 찾아 정규식을 만듭니다. 이것은 또한 문자열 전체를 통해 이 조합을 찾습니다.

var  Re = /\w+\s/g;
var  str = "fee fi fo fum" ;
var  myArray = str.match (re);
console.log (myArray);

이 예에서는 [ "fee", "fi", "fo"이 표시됩니다. 또한 이 예에서는 다음 줄은

var  Re = / \ w + \ s / g;

다음 행 :

var  Re = New  RegExp ( "\\w+\\s" , "g" );

로 대체 할 수 있습니다. 얻어진 결과는 동일합니다.

m 플래그는 여러 줄의 입력 문자열을 여러 행으로 처리 할 때 사용합니다. m 플래그를 사용하면 ^ 및 $ 는 문자열 전체의 시작 또는 끝이 아닌 입력 문자열의 행의 시작이나 끝에도 일치합니다.

다음 예제에서는 정규식의 사용 방법을 몇 가지 보여줍니다.

입력 문자열의 순서 변경

다음 예제에서는 정규식의 구조와 string.split () 및 string.replace () 의 사용 방법을 보여줍니다. 공백, 탭, 하나의 세미콜론으로 구분 된 이름 (퍼스트 네임이 먼저)로 구성된 쉽게 성형 된 입력 문자열을 청소합니다. 마지막으로 이름의 순서를 역전 (라스트 네임이 먼저) 목록을 정렬합니다.

// 이름 문자열은 여러 공백이나 탭을 포함한다.
// 또한 첫 번째 이름과 성 사이에 여러 공백이 있을 수 있다
var  names = "Harry Trump; Fred Barney; Helen Rigby; Bill Abel; Chris Hand" ;
 
var  OUTPUT = "---------- Original String \ n" , names + "\ n" ];
 
// 2 개의 정규식 패턴과 저장을 위한 배열을 준비한다.
// 문자열을 분할하여 배열의 요소에 담는다.
 
// 패턴 : 공백 또는 세미콜론이 존재하는 공백이 있을 수 있다
var  pattern = /\s*;\s* /;
 
// 위의 패턴 문자열을 조각으로 분할하고
// nameList라는 배열에 조각을 포함한다.
var  NameList = names.split (pattern);
 
// 새로운 패턴 : 하나 이상의 문자 하나 이상의 공백 하나 이상의 문자
// 괄호를 이용하여 패턴 조각을 기억한다.
// 기억 한 조각은 나중에 참조된다.
pattern = / (\ w +) \ s + (\ w +) /;
 
// 처리 된 이름을 포함하는 새로운 배열.
var  bySurnameList = [];
 
// 이름의 배열을 표시하고 새로운 배열에 쉼표로 구분 이름을
// 라스트 네임, 퍼스트 네임 순으로 저장한다.
//
// replace 메소드는 패턴과 일치 한 것을 제거하고
// 기억 해둔 문자열로 대체.
// "두 번째로 기억 해 놓은 단편과 그 이후의 쉼표와 공백,
// 그 다음에 이어지는 첫 번째로 기억 놓은 조각 "
//
// 변수 $ 1 및 $ 2는 패턴과 일치시킨 때
// 기억 놓은 조각을 참조
 
output.push ( "---------- After Split by Regular Expression" );
 
var  I, len;


for  (i = 0, len = nameList.length; i  < len; i + +) {
  output.push (nameList [i]);
  bySurnameList [i] = nameList [i]. replace (pattern, "$ 2, $ 1" );
}
 
/ / 새로운 배열을 표시한다.
output.push ( "---------- Names Reversed" );
for  (i = 0, len = bySurnameList.length; i  < len; i + +) {
  output.push (bySurnameList [i]);
}
 
/ / 마지막 이름에 정렬하고 정렬 된 배열을 표시한다.
bySurnameList.sort ();
output.push ( "---------- Sorted" );
for  (i = 0, len = bySurnameList.length; i < len; i + +) {
  output.push (bySurnameList [i]);
}
 
output.push ( "---------- End" );
 
console.log (output.join ( "\ n" ));

특수 문자를 이용한 입력 확인

다음 예에서는 사용자가 전화 번호를 입력합니다. 사용자가 "Check"버튼을 누르면 스크립트가 그 번호의 유효성을 확인합니다. 그 번호가 정당하다 (정규식에 지정된 문자의 연속으로 일치하는) 경우, 스크립트는 사용자에게 감사의 멧세에지을 표시하고 그 번호를 확인합니다. 번호가 정당하지 않은 경우, 그 번호가 타당하지 않은 것을 사용자에게 알립니다.

정규식은 0 또는 1 개의 왼쪽 괄호 \ (? , 연속 3 개의 숫자 \ d {3} , 연속 0 또는 하나의 오른쪽 괄호 \)? 거기에 이어 발견 된 경우에 기억하는 하나의 대시 슬래시 또는 소수점 (-\/\.]) , 연속 3 개의 숫자 \ d {3} , 연속적인 기억 된 하나의 대시, 슬래시 또는 소수점 매치 \ 1 , 연속 4 개의 숫자를 찾아 있습니다.

사용자가 Check 버튼을 눌렀을 때 발동하는 Clink 이벤트는 RegExp.input 의 값을 설정합니다.

      var re = /\(?\d{3}\)?(-\/\.])\d{3}\1\d{4}/;  
      function testInfo (phoneInput) {  
        var OK = re.exec (phoneInput.value);  
        if (! OK)  
          window.alert (RegExp.input + "isn't a phone number with area code!");  
        else
          window.alert ( "Thanks, your phone number is"+ OK [0]);  

      }  

저작권 공지

이 문서의 모든 저작권은 Mozilla.org에 있습니다. 이 문서는 "모질라 기여자"들에 의해 작성 되었습니다. 원문 보기
저희가 한글로 번역한 2차적저작물에 대한 저작권 역시 Mozilla.org에 있습니다.