: 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어입니다.
^ | 문자열의 시작 |
$ | 문자열의 끝 |
. | 임의의 한 문자 |
* | 문자가 0번 이상 발생 |
+ | 문자가 1번 이상 발생 |
? | 문자가 0번 혹은 1번 발생 |
[ ] | 문자의 집합 범위를 나타냄 [0-9] : 숫자 (0부터 9) [a-z] : 알파벳 (a부터 z) 앞에 ^가 나타나면 not을 의미 |
{ } | 횟수 또는 범위를 의미 |
( ) | 소괄호 안의 문자를 하나의 문자로 인식 |
| | or 조건 |
\ | 확장 문자의 시작 |
\b | 단어의 경계 |
\B | 단어가 아닌 것의 경계 |
\A | 입력의 시작부분 |
\G | 이전 매치의 끝 |
\Z | 입력의 끝이지만 종결자가 있는 경우 |
\z | 입력의 끝 |
\s | 공백문자 |
\S | 공백문자가 아닌 나머지 문자 |
\w | 알파벳이나 숫자 |
\W | 알파벳이나 숫자를 제외한 문자 |
\d | [0-9]와 동일 |
\D | 숫자를 제외한 모든 문자 |
(?:) | 캡처(Capture)하지 않는 그룹 |
자주 사용하는 정규식모음
한글, 숫자, 영문 | ^[가-힣0-9a-zA-Z]*$ |
이메일 | 기본체크: /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/ RFC5322: /\b[\w.!#$%&’*+\/=?^`{|}~-]+@[\w-]+(?:\.[\w-]+)*\b/ 전자우편 주소: /^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/ 정밀체크 : /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/ |
특수문자 | [^가-힣0-9a-zA-Z] |
휴대전화번호 | 3자리-3~4자리-4자리(사이에 1자 아무거나 가능)): /^[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3,4}[-\s\.]?[0-9]{4}$/ 3자리-3~4자리-4자리(사이에 "-" 고정): /^\d{3}-\d{3,4}-\d{4}$/ 휴대폰&전화번호: /(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/ 휴대폰번호: /^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$/ |
신용카드번호 | 19자리 숫자와 "-": /^[0-9-]{19}$/ 4-4-4-4 체크: /^[0-9]{4}[-\s\.]?[0-9]{4}[-\s\.]?[0-9]{4}[-\s\.]?[0-9]{4}$/ |
아스키II 코드만 | /[ -~]/ |
UUID | /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/ |
맥어드레스 | /^[a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}$/ |
IP주소(IPv4) | /(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/ |
IP주소(IPv6) | /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/ |
URL | 프로토콜 포함: /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#()?&//=]*)/ 프로토콜 옵션: /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/ |
HTML 태그 | /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/ /<\/?[\w\s]*>|<.+[\W]>/ /<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)/ |
년월일 | yyyy-mm-dd: /^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$/ |
주민등록번호 | /^[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[@]{1}[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[.]{1}[A-Za-z]{1,5}$/ |
확장자체크 | /([^\s]+(?=\.(jpg|gif|png))\.\2)/ |
JAVA
find() : 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동(여러개가 매칭되는 경우 반복 실행가능)
find(int start) : start위치 이후부터 매칭검색을 수행
start() : 매칭되는 문자열 시작위치 반환
start(int group) : 지정된 그룹이 매칭되는 시작위치 반환
end() : 매칭되는 문자열 끝 다음 문자위치 반환
end(int group) : 지정되 그룹이 매칭되는 끝 다음 문자위치 반환
group() : 매칭된 부분을 반환
group(int group) : 매칭된 부분중 group번 그룹핑 매칭부분 반환
groupCount() : 패턴내 그룹핑한(괄호지정) 전체 갯수 반환
matches() : 패턴이 전체 문자열과 일치할 경우 true 반환
String line = "aaaaaaaaa1234bbbbbbbb";
String pattern = "(.*)([0-9]{3,})(.*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
System.out.println(m.group(0));
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
aaaaaaaaa1234bbbbbbbb (0 전체)
aaaaaaaaa1 (1번째 그룹)
234 (2번째 그룹)
bbbbbbbb (3번째 그룹)
String line = "wooyeo n0111123333333333333333333333333333333333333333111111111111116@gmail.com";
String pattern = "[^가-힣0-9a-zA-Z]";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(line);
while(m.find()) {
System.out.println(line.substring(m.start(), m.end()));
}
Javascript
exec() : 문자열에서 일치하는 부분을 탐색합니다. 일치 정보를 나타내는 배열, 또는 일치가 없는 경우 null을 반환합니다.
test() : 문자열에 일치하는 부분이 있는지 확인합니다. true 또는 false를 반환합니다.
match() : 캡처 그룹을 포함해서 모든 일치를 담은 배열을 반환합니다. 일치가 없으면 null을 반환합니다.
search() : 문자열에서 일치하는 부분을 탐색합니다. 일치하는 부분의 인덱스, 또는 일치가 없는 경우 -1을 반환합니다
플래그를 활용한 고급 탐색
d | 부분 문자열 일치에 대해 인덱스 생성. |
g | 전역 탐색. |
i | 대소문자를 구분하지 않음. |
m | 여러 줄에 걸쳐 탐색. |
s | 개행 문자가 .과 일치함. |
u | "unicode", 패턴을 유니코드 코드 포인트의 시퀀스로 간주함. |
y | "접착" 탐색, 대상 문자열의 현재 위치에서 탐색을 시작함. sticky (en-US)를 참고하세요. |
const regex = /hello/;
const str = 'hello world';
console.log(regex.test(str)); // true
const regex = /hello/;
const str = 'hello world';
const result = regex.exec(str);
console.log(result); // ["hello"]
console.log(result.index); // 0 (매치된 문자열의 시작 인덱스)
console.log(result.input); // "hello world" (원본 문자열)
const str = 'hello world hello';
const result = str.match(/hello/g); // 'g' 플래그로 모든 매치를 찾음
console.log(result); // ["hello", "hello"]
참조
https://hbase.tistory.com/160
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions
'WEB개발 > JS&HTML' 카테고리의 다른 글
[JS] Deferred (0) | 2023.07.22 |
---|---|
[JS] Async, Await, Fetch, PromiseAll (0) | 2023.03.06 |
[JS] JS의 비동기 작업 ( = promise, promiseAll) (0) | 2021.06.24 |
[JS] Engine, Event Loop (0) | 2021.06.24 |
[html] input(inputmode, event, pattern) (0) | 2021.06.24 |