정규표현식(REGEX/REGEXP: Regular Expression)
: 특정 패턴을 가진 문자열을 찾거나 변경할 때 사용하는 형식 언어이다.
- 문자열에 대해 특정 패턴의 조건을 검사하거나 변경할 때 복잡한 조건을 제시하지 않고 간단하게 처리할 수 있다.
- JavaScript 외에 Java, Oracle 등 다른 언어에서도 사용할 수 있다.
정규 표현식 객체 생성 방법
방법1. 생성자 구문으로 작성한다.
var regExp = new RegExp("script");
방법2. 정규식 변수를 선언한다.
var regExp = /script/;
정규 표현식과 관련된 메소드
var sub1 = "javascript jquery ajax";
var sub2 = "java oracle html css";
1. RegExp 객체에서 제공하는 메소드 - 정규식.메소드(문자열)
1) 정규식.test(문자열)
: 문자열에서 정규식 값과 일치하는 값이 있으면 true, 없으면 false를 반환한다.
document.getElementById("div1").innerHTML += regExp.test(sub1) + "<br>"; // true
document.getElementById("div1").innerHTML += regExp.test(sub2) + "<br>"; // false
2) 정규식.exec(문자열) *
: 문자열에서 정규식 값과 일치하는 값이 있으면 처음에 매칭된 문자열을 반환하고,
일치하는 값이 없으면 null을 반환한다.
document.getElementById("div1").innerHTML += regExp.exec(sub1) + "<br>"; // script
document.getElementById("div1").innerHTML += regExp.exec(sub1) + "<br>"; // null
2. String 객체에서 제공하는 메소드 - 문자열.메소드(정규식)
1) 문자열.match(정규식)
: 문자열에서 정규식 값과 일치하는 값을 찾아서 반환한다.
document.getElementById("div1").innerHTML += sub1.match(regExp) + "<br>"; // script
2) 문자열.search(정규식)
: 문자열에서 정규식 값과 일치하는 값이 있으면 그 일치하는 값의 시작인덱스값을 반환하고,
일치하는 값이 없으면 -1을 반환한다.
document.getElementById("div1").innerHTML += sub1.match(regExp) + "<br>"; // 4
// 문자 하나씩 인덱스에 들어가므로 'j', 'a', 'v', 'a', 's', ...
// script의 's'는 4번째 인덱스에 있다.
3) 문자열.replace(정규식, 바꿀 값) *
: 문자열에서 정규식 값과 일치하는 첫 번째 부분만을 바꿀 값으로 변경하여 반환한다.
document.getElementById("div1").innerHTML += sub1.replace(regExp, '스크립트') + "<br>";
// java스크립트 jquery ajax
4) 문자열.split(정규식)
: 정규식에 지정된 값을 구분자로 하여 쪼개진 값들이 담겨있는 배열을 반환한다.
document.getElementById("div1").innerHTML += sub1.split(regExp) + "<br>";
// java, jquery ajax
메타 문자
: 정규식을 검색 조건으로 설정하기 위해 특정 패턴을 제시할 때 메타 문자를 사용한다.
문자열이 해당 정규식으로 제시한 패턴에 조건이 만족하는지 확인하기 위해
test() 메소드를 통해 검사하거나 replace() 메소드를 통해 치환한다.
var zone = document.getElementById("zone");
var str = "javascript jquery ajax";
1. 메타 문자가 없을 때
var regExp = /a/;
zone.innerHTML += regExp.test(str) + "<br>"; // true
zone.innerHTML += str.replace(regExp, '*'); // j*vascript jquery ajax
2. 메타 문자가 있을 때
1) ^ : 시작
regExp = /^j/; // j로 시작
console.log(str.replace(regExp, '*')); // *avascript jquery ajax
2) [] : [] 내의 문자 중에 하나라도 존재하면 치환한다.
regExp = /[apq]/; // a, p, q 중 하나라도 있으면
console.log(str.replace(regExp, '*')); // j*vascript jquery ajax
3) $ : 끝
regExp = /x$/; // x로 끝
console.log(str.replace(regExp, '*')); // javascript jquery aja*
4) . : 개행 문자를 제외한 모든 문자(영문자나 숫자, 한글, 특수문자)
regExp = /^j.+x$/; // j로 시작해서 x로 끝나되 개행문자를 제외한 모든 문자가 한 글자 이상
console.log(str.replace(regExp, '*')); // *
5) + : 한 글자 이상
* : 0글자 이상
? : 0글자나 1글자(2글자 이상 불가)
8) {n} : n글자
{n, m} : n~m자 이내
{n,} : n글자 이상
{,m} : m글자 이하
9) \d : 숫자([0-9]와 동일)
\D : 숫자를 제외한 모든 문자
\w : 영문자나 숫자, _
\W : 영문자와 숫자, _를 제외한 모든 문자
\s : 띄어쓰기와 탭, 줄바꿈 등 공백 문자
\S : 공백 문자를 제외한 모든 숫자
플래그 문자
var str = "javaScript jQuery Ajax";
1. i
: 대소문자를 불문하고 비교를 수행한다.
var regExp = /a/i;
console.log(str.replcae(regExp, "*")); // j*vaScript jQuery Ajax
2. g
: 문자열 내의 모든 패턴을 찾는다.
- 여러 줄일 때 개행된 줄엔 g가 적용되지 않는다.
var regExp = /a/g;
console.log(str.replcae(regExp, "*")); // j*v*Script jQuery Aj*x
3. m
: 여러 줄에 대해 비교를 수행한다.
str = "JavaScript\nJQuery\nAjax"; // 개행
var regExp = /a/m;
console.log(str.replcae(regExp, "*"));
// *avaScript
// JQuery
// Ajax