지금까지 예는 장 제목이 나타나는 위치를 찾는 작업에 관한 것이었다.
공백, 숫자가 이어지는 '과제' 문자열의 위치는 실제 장 제목이거나 다른 장에 대한 상호 참조일 수 있다.
실제로 장 제목은 항상 줄의 시작 위치에 있으므로 제목만 찾고 상호 참조는 찾지 않는 방법을 만들 수 있다.
앤커가 이러한 기능을 제공한다.
앤커를 사용하면 정규식을 줄의 시작이나 끝으로 고정시킬 수 있다. 단어 내부 또는 단어 시작이나 끝에 나타나는 정규식을 만들 수도 있다.
다음 표는 정규식 앤커를 설명한다.
문자 | 요약 | 설명 |
---|---|---|
^ | 시작 위치 | 입력 문자열의 시작 위치를 찾는다. multiline(m) 속성이 설정되어 있으면 ^는 '\n' 또는 '\r' 앞의 위치를 찾는다. |
$ | 끝 위치 | 입력 문자열의 끝 위치를 찾는다. multiline 속성이 설정되어 있으면 $는 '\n' 또는 '\r'의 뒤의 위치를 찾는다. |
\b | 공백 경계 | 단어의 경계, 즉 단어와 공백 사이의 위치를 찾는다. 예를 들어, 'er\b'는 'never '의 'er'는 찾지만 'verb'의 'er'는 찾지 않다. |
\B | 비공백 경계 | 단어의 비경계를 찾는다. 'er\B'는 'verb'의 'er'는 찾지만 'never'의 'er'는 찾지 않다. |
앤커와 한정 기호는 함께 사용할 수 없다.
줄 바꿈 또는 단어 경계 전후 바로 다음에는 한 자리만 올 수 있으므로 '^*'와 같은 식은 허용되지 않다.
문자열 줄의 시작 위치에 있는 부분 문자열를 찾으려면 정규식 시작에 '^' 문자를 사용한다.
이것은 대괄호 식에서 사용하는 '^'와는 다르다.
문자열 줄 끝에 있는 부분 문자열를 찾으려면 정규식 끝에 '$' 문자를 사용한다.
![]() | 정규식 앤커⇒ | ![]() | ![]() ![]() ![]() |
정규식에 전역 검색을 위한 global(g) 속성과
여러줄 검색을 위한 multiline(m) 속성을 추가하고 match메서드를 사용하였다.
string='과제 11 11 내용이다. 과제 12 12 내용이다. \n과제 19 19 내용이다.20 내용이다. 과제 20과제'; document.write(string);
장 제목을 찾을 때 다음 Javascript 정규식에서처럼 앤커를 사용할 수 있다.
줄의 시작 위치에서 두 자리까지 장 제목을 찾는다.
제일 앞과 새줄(\n) 바로 뒤의 것들 과제 11과 과제 19 만 찾았다.
reg=/^과제 [0-9][0-9]{0,1}/gm; document.write(string.match(reg));
이와 동일한 VBScript의 정규식은 다음과 같다.
"^과제 [1-9][0-9]{0,1}"
줄에는 장 제목은 줄의 끝에 있을 수 있다. 이 정규식은 문자열 줄의 끝에서만 찾는다.
reg=/과제 [1-9][0-9]{0,1}$/gm; document.write(string.match(reg));
VBScript 를 사용하는 경우는 다음과 같다.
"과제 [1-9][0-9]{0,1}$"
실제로 장 제목이 있는 줄에는 장 제목만 있으므로 장 제목은 줄의 시작이나 끝에 있어야 한다.
다음 식에서 지정된 검색 문자열은 장만 찾고 상호 참조는 찾지 않다.
따라서 이 정규식은 문자열 줄의 시작과 끝에서만 찾는다.
실험을 위하여 새로운 무자열을 지정하였다.
string1='과제 20'; reg=/^과제 [1-9][0-9]{0,1}$/gm; document.write(string1.match(reg));
VBScript 를 사용하는 경우는 다음과 같다.
"^과제 [1-9][0-9]{0,1}$"
단어 경계를 찾는 방법은 약간 다르지만 정규식에 매우 중요한 기능을 추가한다.
단어 경계(\b)는 단어와 공백 사이의 위치이다. 비단어 경계(\B)는 그외 다른 위치이다.
여기서 '\b' 연산자의 위치는 매우 중요하다.
이 연산자가 검색할 문자열 앞에 올 경우 단어의 시작 부분에서 문자열을 찾고,
검색할 문자열 뒤에 올 경우에는 단어의 끝 부분에서 문자열을 찾는다.
reg=/\b과/gm; document.write(string.match(reg)); reg=/제\b/gm; document.write(string.match(reg));
문제가 발생되었다.
문제는 한글은 모두 비단어 취급을 하기 때문에 단어 경계를 찾을 수 없어 없는 것으로 나타났다.
다라서 한글의 경우는 이 정규식으로 검색 결과 찾지 못한다.
영어로 변수를 지정해서 검색해 보면...
앞 예제는 'Sub' 앞이 공백이므로 'Subject'의 'Sub'를 찾는다.
뒤 예제는 'ject' 뒤가 공백이므로 'Subject'의 'ject'를 찾는다.
string1='Subject 11, Subject 12'; reg=/\bSub/gm; document.write(string1.match(reg),'<BR>'); reg=/ject\b/gm; document.write(string1.match(reg));
이번엔 단어 연결 부분대신 비단어 연결부분으로 찾아보자. 다음 식은 '제목'의 '제'를 찾는다.
앞 예제는 '제' 뒤가 비공백이므로 '과제'의 '제'를 찾는다.
뒤 예제는 '과' 앞이 비공백이므로 '과제'의 '과'를 찾는다.
reg=/제\B/gm; document.write(string.match(reg),'<BR>'); reg=/\B과/gm; document.write(string.match(reg));
앞 예제는 'ject' 앞이 비공백이므로 'Subject'의 'ject'를 찾는다.
뒤 예제는 'Sub' 뒤가 비공백이므로 'Subject'의 'Sub'를 찾는다.
reg=/\Bject/gm; document.write(string1.match(reg),'<BR>'); reg=/Sub\B/gm; document.write(string1.match(reg));
비단어 경계 연산자의 경우 검색할 문자열이 단어 시작이나 끝과 관계가 없으므로 위치는 중요하지 않다.
![]() | 정규식 앤커 | ⇒ | ![]() ![]() |
최종 수정: 04/30/2025 13:46:40 | ![]() All right reserved | 비정상적인 방식으로 프레임없이 페이지에 접속하면 자주 오류가 발생됩니다. 오류가 나면 정상적 접속으로 시도해 보세요. | http://koxo.com/lang/js/refers/global.html |