https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp
1. 정규표현식 이란
(1) 정규표현식(regular expression)은 문자열에서 특정한 문자를 찾아내는 도구다.
(2) 일종의 언어로써, 자바 등 다른 언어에서도 사용된다.
(3) - 컴파일 : 검출하고자 하는 패턴을 만드는 일이다
- 실행 : 컴파일해서 객체를 만들었다면 이제 문자열에서 원하는 문자를 찾아내기
2. 컴파일
; 검출하고자 하는 패턴을 만드는 일이다
정규표현식 리터럴 |
var pattern = /a/
예시) /ab+c/i; |
정규표현식 객체 생성자 |
var pattern = new RegExp('a')
예시) new RegExp('ab+c', 'i'); new RegExp(/ab+c/, 'i'); |
3. 정규표현식 메소드 실행
; 컴파일해서 객체를 만들었다면 이제 문자열에서 원하는 문자를 찾아내기
RegExp.exec( ) |
특정 정보를 추출할때 사용 |
(1) var pattern = /a/ console.log(pattern.exec('abcdef')); // ["a"]
(2) var pattern = /a/ console.log(pattern.exec('bcdefg')); // null
(3) var pattern = /a./ -> . 쩜은 a 뒤에 어떤문자가 와도 a와 그 문자 포함 console.log(pattern.exec('abcdef')); //["ab"]
|
RegExp.test() |
test는 인자 안에 패턴에 해당되는 문자열이 있으면 true, 없으면 false를 리턴한다. |
(1) var pattern = /a/ console.log(pattern.test('abcdef')); // ture
(2) var pattern = /a/ console.log(pattern.test('bcdefg')); // false; |
4. 문자열에서 정규 표현식 사용
String.match() |
var pattern = /a/ console.log('abcdef'.match(pattern)); // ["a"] console.log('bcdefg'.match(pattern)); // null
|
string.replace( ) |
var pattern = /a/ console.log('abcdef'.replace(pattern, 'A')); // Abcdef |
5. 정규표현식 옵션
i |
대소문자를 구분하지 않음 |
(1) var xi = /a/ console.log("Abcde".match(xi); // null
(2) var oi = /a/i ; console.log("Abcde".match(oi); // ["A"] |
g |
검색된 모든 값을 리턴 |
(1) var xg = /a/; console.log("abcdea".match(xg)); //["a"]
(2) var og = /a/g; console.log("abcdea".match(og)); //["a","a"] |
6. 정규표현식 사례(캡쳐)
(\w+) \s (\w+) |
1. \w+ -> w : word ( 기호 제외) -> + : 1개이상. -> 따라서 문자가 1개 이상인 경우
2. ( ). -> 하나의 그룹의 의미
3. \s -> 공백을 의미 (space)
위를 충족하는 예시 ) AAAvdf ASDFddsdf
참고) https://regexper.com/ 정규표현식 시각화 도구 |
var pattern = /(\w+)\s(\w+)/; var str = "coding everybody"; var result = str.replace(pattern, "$2, $1"); console.log(result); |
$2 : pattern의 2번째 그룹 $1 : pattern의 1번째 그룹
|
7. 기초 용어
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D
i |
대소문자를 구분하지 않음 |
(1) var xi = /a/ console.log("Abcde".match(xi); // null
(2) var oi = /a/i ; console.log("Abcde".match(oi); // ["A"] |
g |
검색된 모든 값을 리턴 |
(1) var xg = /a/; console.log("abcdea".match(xg)); //["a"]
(2) var og = /a/g; console.log("abcdea".match(og)); //["a","a"] |
+ |
해당 정규표현식이 1개 이상 대응 |
var reg = /[a]+/ var str = "aaaa bbb. aadd" var arr = str.split(reg)//[""," bbb","dd"] |
^ |
not의 의미 |
var reg = new RegExp(/[^a-z0-9]/,"gi")
var str = "abcAAA123!!!!!!!" str.match(reg) // ["!", "!", "!", "!", "!", "!", "!"] |
| |
또는 의미 |
var reg = /[-]+|[#]+/
var str = "aaa##bbb--ccc"
var arr = str.split(reg) // ["aaa","bbb","ccc"] |
\w (소문자 w) |
밑줄을 포함한 모든 영문,숫자에 대응 |
(1)다음과 같음. : [A-Za-z0-9_] (2) 예시 var reg = /\w/g var str = "aaaa++bbbb__ccc&&&ddd"
var arr = str.match(reg) // ["a", "a", "a", "a", "b", "b", "b", "b", "_", "_", "c", "c", "c", "d", "d", "d"] |
\W (대문자 W) |
\w 와 반대 |
(1)다음과 같음 : [^A-Za-z0-9_] (2) 예시 var reg = /\W/g var str = "aaaa++bbbb__ccc&&&ddd"
var arr = str.match(reg) //["+", "+", "&", "&", "&"] |
8. 사용 예시
정규표현식 내에 변수 쓰기 |
let reg = new RegExp(char,'g')// 정답 let reg = new RegExp("char",'g') // 오답 |
문자열 내에서 알파벳만 찾기 |
var reg = var reg = new RegExp(/[a-z]/,"gi")
var str = "abcAAA!!!!!!!" str.match(reg) // ["a", "b", "c", "A", "A", "A"] |
문자열 내에서 알파벳 제외 하고 찾기 |
var reg = new RegExp(/[^a-z]/,"gi")
var str = "abcAAA123!!!!!!!" str.match(reg) // ["1", "2", "3", "!", "!", "!", "!", "!", "!", "!"] |
문자열 내에서 숫자만 찾기 |
var reg = /[0-9]/g
var str = "abc...!!123" str.match(reg) // ["1", "2", "3"] |
문자열내에서 (알파벳, 숫자) 아닌 경우 찾기 |
var reg = new RegExp(/[^a-z0-9]/,"gi")
var str = "abcAAA123!!!!!!!" str.match(reg) // ["!", "!", "!", "!", "!", "!", "!"] |
split 사용시 구분자 여러개 넣기 |
var reg = /[-+]/
var str ="30-10-50+30-3122+325" str.split(reg) // ["30", "10", "50", "30", "3122", "325"] |
정규표현식에서 "또는" 구현 ( | 사용) |
var reg = /[-]+|[+]+/ var str = "aaa++bbb--ccc"
var arr = str.split(reg) // ["aaa","bbb","ccc"] |
<생활코딩 정규표현식 강의 >
https://opentutorials.org/course/743/6580
'프로그래밍공부 > 자바스크립트' 카테고리의 다른 글
클래스 (0) | 2019.06.20 |
---|---|
arguments 와 전개연산자(...xxx) (0) | 2019.06.20 |
scope & closure (0) | 2019.06.20 |