정규표현식은 문자열에서 특정한 문자열을 찾아내는 도구입니다.
규칙들을 조합하여 원하는 패턴을 만들고, 특정 문자열에서 해당 패턴과 대응하는 문자를 찾을 수 있습니다.
정규표현식을 사용해 한 줄의 코드만으로 이메일이나 휴대전화 번호의 유효성을 검사할 수 있습니다.
let regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
let regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/;
정규표현식은 알고리즘 문제를 풀 때에도 적용할 수 있습니다.
정규표현식 규칙을 '/' 로 감싸 사용합니다. 슬래시 안에 들어온 문자열이 찾고자 하는 문자열임을 뜻합니다.
let pattern = /c/;
RegExp 객체의 생성자 함수를 호출하여 사용합니다.
let pattern = new RegExp('c');
Javascript에서 정규표현식은 객체로서 내장 메소드를 가지고 있으며, String 객체에서도 정규표현식을 사용할 수 있는 내장메소드를 가지고 있습니다.
내장 메소드를 이용하면 어떤 문자열 안에 원하는 정보를 찾거나 특정 패턴에 대응하는 문자열을 검색, 추출, 다른 문자열로 치환할 수 있습니다.
exec는 execution의 줄임말로, 원하는 정보를 뽑아내고자 할 때 사용합니다. 검색의 대상이 찾고자 하는 문자열에 대한 정보를 가지고 있다면 이를 배열로 반환하며, 찾는 문자열이 없다면 null을 반환합니다.
let pattern = /t/; // 찾고자 하는 문자열 t
pattern.exec('tony'); // 검색하려는 대상을 exec 메소드의 첫 번 째 인자로 전달합니다.
t가 포함됐는지 확인 후 포함되어 있다면, ['t'] 를 반환합니다.
찾고자 하는 문자열이 대상 안에 있는지의 여부를 boolean으로 리턴합니다.
let pattern = /t/;
pattern.test('tony');
't'를 포함하고 있기 때문에 true를 반환합니다.
정규 표현식을 인자로 받아 주어진 문자열과 일치된 결과를 배열로 반환합니다. 일치되는 결과가 없으면 null을 반환합니다.
let pattern = /t/;
let str = 'tony';
str.match(pattern);
pattern 안에 t가 포함됐기 때문에, ['t']를 반환합니다.
검색 후 바꾸기를 실행합니다. 첫 번째 인자로는 정규표현식을 받고, 두 번째 인자로는 치환하려는 문자열을 받습니다. 문자열에서 찾고자 하는 대상을 검색해서 이를 치환하려는 문자열로 변경 후 변경된 값을 리턴합니다.
let pattern = /t/;
let str = 'tony';
str.replace(pattern, 'D');
'Dony'를 반환합니다.
주어진 인자를 구분자로 삼아, 문자열을 부분 문자열로 나누어 그 결과를 배열로 반환합니다.
"123,456,789".split(",");
"12304560789".split(",");
["123","456","789"]["123","456","789"] 를 반환합니다.
정규표현식을 인자로 받아 가장 처음 매칭되는 부분 문자열의 위치를 반환합니다. 매칭되는 문자열이 없으면 -1을 반환하고, 대소문자를 반드시 구분해야 합니다.
"JavaScript".search(/script/); // -1 반환 (대소문자가 다름)
"JavaScript".search(/Script/); // 4를 반환 4번 index
"Tony".search(/ony/); // 1을 반환
플래그는 추가적인 검색 옵션 역할을 합니다. 순서에 구분이 없고, 자주 사용됩니다. (i, g, m)
let withi = /t/i;
let withouti = /t/;
"Tony".match(withj); // ['t'] 출력
"Tony".match(withoutj); // null 반환
let withg = /t/g;
let withoutg = /t/;
"tonythor".match(withg); // ['t', 't'] 출력
"tonythor".match(withoutg); // ['t'] g 옵션이 없기 때문에 첫 번째 검색 결과만 반환
let str = `1st avengers
2nd tony
3rd thor`;
str.match(/t/gm); // ['t', 't'] 3개의 행을 검색하여 모든 t를 반환
str.match(/t/g/); // m은 다중행 검색옵션이지만 g 옵션을 제외하고 검색하면 첫 번째 결과값 ['t']만 출력합니다.