[ / ]는 정규표현패턴의 시작과 종료를 나타내는 예약어이다.
패턴내 /를 사용할려면 escape을 사용 [ \/ ]와 같이 사용해야 된다.
또한 \ 또한 예약어이므로 javascript 소스의 정규표현내 \d 등과 같은 정규식을 사용할 경우, \\d 와 같이 사용할 필요가 있다.
var regex = /정규표현/옵션;
var regex = new RegExp('정규표현', '옵션');
옵션 | 설명 |
---|---|
g | global search, 문자열전체를 대상으로 매칭되는가를 검색 지정 안할경우 1번 매칭된 시점에서 종료한다. |
i | 대소문자를 구별하지 않는다. (지정 안하면 구별한다) |
m | 여러행의 입력문자열을 여러행으로 취급 ^ 또는 $ 가 각각의 행의 앞뒤에 매칭한다. |
u | Unicode대응 |
s | . 을 개행문자와 일치하게 한다. |
y | 문자열의 맨 마지막부터 검색한다. |
\b | \b vs [\b] | 단어의 경계(단어취득) | backspace를 의미 [\b] |
^ | ^a vs [^abc] | 시작 (a로 시작하는 것) | 부정 (a나 b나 c와 일치하지 않는것) |
- | [a-c] vs [abc-] | a~c 까지중 1개 문자 | a~c 나 하이픈(-) 4개 문자중 하나 |
범주 | 문자조합 |
---|---|
Character classes | \ , . , \cX , \d , \D , \f , \n , \r , \s , \S , \t , \v , \w , \W , \0 , \xhh , \uhhhh , \uhhhhh , [\b] |
Assertions | ^ , $ , x(?=y) , x(?!y) , (?<=y)x , (?<!y)x , \b , \B |
Groups, backreferences | (x) , (?:x) , (?<Name>x) , x|y , [xyz] , [^xyz] , \Number |
Quantifiers | * , + , ? , x{n} , x{n,} , x{n,m} |
Unicode property escapes | \p{UnicodeProperty} , \P{UnicodeProperty} |
※ 참조 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
표현 | 의미 | 설명 |
---|---|---|
x* | 0회 이상 반복 | /ab*/ = a뒤에 b가 없거나 여러개 |
x+ | 1회 이상 반복 | /ab+/ = a뒤에 b가 1개 이상 나올 것 /ab{1,}/ 과 동일하다 |
x? | 0 또는 1회 | /a?bc?/ = b앞에 a가 없거나 하나, 뒤에 c가 없거나 하나 |
x{n} | n회 반복 | /a{2}/ = a가 2회반복 "aa" 가 포함된거 ( aa취득) |
x{n, } | n회 이상 반복 | /a{2,}/ = a가 2회이상 반복 (연속된 a 갯수만큼 취득) |
x{n,m} | n이상 m미만 | /a{2,5}/ = a가 2~5사이 반복 |
x*? | 반복한정 (?) | /<.*>/ 는 "<aa><bb>cc</bb></aa>" 에 일치시 /<.*?>/ 는 "<aa>" 에 일치 |
※ '<a><b></b></a>'.match(/<(.*?)>/); => ?가 없으면 각각 태그가 아니고 전체일치 의미
표현 | 의미 | 설명 |
---|---|---|
(x) | 캡쳐그룹 | 일치한 내용 보존 |
(?:x) | 비캡쳐 그룹 | 일치하지만 내용은 보존안함 |
\Number | ||
(?<Name>x) | 캡쳐이름 | x를 찾아 groups명 Name에 저장 |
표현 | 의미 | 설명 |
---|---|---|
^ | 처음 시작 | 첫문자 일치여부, /^A/는 첫글자가 A로 시작이면 A |
$ | 마지막 끝남 | 마지막 일치여부, /Z$/는 Z로 끝날 경우 Z |
\b | 단어를 검색 | /\ba/=a로 시작하는 단어일 경우 a를 취득 /zz\b/=zz로 끝나는 단어일 경우 zz를 취득 |
\B | 단어구분 외 | /\B../ = "noonday" 에서 "oo" 단어구분아닌 연속 2문자 /ye\B/ = "possibly yesterday" 에서 "ye" : ye로 끝나는 단어가 아닌 "ye" 취득 |
x(?=y) | x 뒤 y 일때 x | /ab(?=cd|ef)/ = "abcd" or "abef" 일 경우 둘다 "ab"를 취득 |
x(?!y) | x 뒤 y가 아닐때 x | /\d+(?!\.)/ = 숫자되에 . 이 없는 숫자를 취득 |
(?<=y)x | y 뒤 x 일때 x | /(?<=ab|cd)ef/ = "abef", "cdef" 인 경우 "ef" 취득 |
(?<!y)x | y 뒤 x가 아닐때 x | /(?<!-)\d+/ = 음수(-)가 안붙는 숫자와 일치 |
표현 | 의미 | 설명 |
---|---|---|
[abc], [a-c] | OR 일치 | a,b,c 중 하나와 일치하면 취득 ※ [abc-][-abc] 의 경우 하이픈이 범위가 아니고 a,b,c,- 4개중 하나 일치를 나타냄 |
\n | 개행문자 | 개행문자와 일치 |
\s | 공백 | white space (스페이스, 탭, 개행문자코드 등) |
\S | 공백 이외 | white space를 제외한 모든것 ex) /\Sw*/ "abc" in "abc def" |
. (점) | 어떤 1문자 | 1) 개행문자(\n,\r,\u2028,\u2029)를 제외한 1개문자를 의미 2) /./ and "\." 는 1개문자 but /\./ and "\\."은 점(.)을 찾는다. 3) [.] 대괄호 안에서는 점을 의미 = [\.] 또는 \. 으로 해석된다. |
\d | 숫자 | [0-9]와 동일하다 (/\d/ or /[0-9]/ 는 숫자를 검색 |
\D | 숫자 이외 | [^0-9]와 동일, 숫자이외 문자를 검색 |
\w | 영수_문자 | [A-Za-z0-9_] 언더라인 포함한 영수문자를 검색 |
\W | 영수_이외 | [^A-Za-z0-9_] 언더라인 포함한 영수문자를 제외하고 검색 |
x|y | or | x or y |
\ | escape | escape 하는 것을 의미 |
[\b] | backspace | backspace 문자를 의미 |
\0 | NULL | NULL문자일치, 바로 뒤 숫자금지 (0~7)이오면 8진수 escape가 됨 |
\f | 페이지 넘김 | 페이지 넘김과 일치 |
\v | 탭(수직) | 수직 tab과 일치 |
\t | 탭(수평) | 수평 tab과 일치 |
\r | 캐리지 리턴 | carriage return 과 일치 |
\hhhh | UTF-8 코드 | hhhh(4자리16진수) UTF-16코드와 일치 |
\xhh | 16진 코드 | hh(2자리 16진수) 문자코드에 일치하는 문자 ex) /\cM\cJ/ = "\r\n", /\cM/ = control-M 과 동일 |
\cX | 특수문자 | Controller 문자 (X 는 A-Z를 의미) |
\u{hhhh}, \u{hhhhh} | Unicode | 16진수 Unicode값에 일치 |
메소드 | 반환값 | 설명 | |
---|---|---|---|
test | true/false | exp.test(str) | 문자열에 일치하는 부분이 있는지 확인한다. |
exec | 배열/null | exp.exec(str) | 문자열중 일치하는 것을 검색한다. 결과를 배열로 반환, 없으면 null |
match | 배열/null | str.match(exp) | 캡쳐그룹포함해 모든 일치를 담은 배열 반환 |
matchAll | 모든일치반복기 | str.matchAll(exp) | Capture Group을 포함한 모든 매칭을 갖는 iterator을 반환 RegExp String Iterator (/exp/g) |
search | index/-1 | str.search(exp) | 문자열중 일치하는지 테스트 매칭하면 index를 반환한다. 검색실패의 경우 -1을 반환한다. |
replace | 첫일치 변경 | str.replace(exp,'$2..$1') | 검색해 문자열을 치환 |
replaceAll | 모두 변경 | str.replaceAll(exp,replaceStr) | regex = ( /exp/g) |
split | 배열 | str.split(exp) | 정규표현이나 지정문자열로 문자열을 분할해 배열로 반환 |
var str = "ABCDEAXY";
var result = str.match(/[a-c]/gi);
console.log(result);
▶ (4) ["A", "B", "C", "A"]
var str = "ABCDEAXY";
var result = /[a-c]/gi.exec(str);
console.log(result);
▶ ["A", index: 0, input: "ABCDEAXY", groups: undefined]
검색문자열을 검색해 true/false로 반환한다.
var str = "ABCDEAXY";
var result = /[a-c]/gi.test(str);
console.log(result);
▶ true
지정 정규표현으로 검색된 맨처음 문자의 위치를 반환한다.
맨앞일경우 0, 존재하지 않을 경우에는 -1을 반환한다.
var str = "xxABCDEAXY";
var result = str.search(/[a-c]/i);
console.log(result);
▶ 2
매칭문자열을 치환하거나, 매칭변수에 저장해 치환할 수 있다.
인수로 $1 ~ $9 까지 특수변수를 사용할 수 있다. 그룹화 ( )괄호로 사용가능
var str = "010-1234-5678";
var result = str.replace(/^(\d{3})-\d{4}-(\d{4})$/, '$1-****-$2');
console.log(result);
▶ 010-****-5678
var str = "2020/01/10 23:20:40.1234";
var result = str.split(/[\/\.:\s]/);
console.log(result);
▶ (7) ["2020", "01", "10", "23", "20", "40", "1234"]