프로그래머스를 풀다가, 내가 끙끙대며 만들었던 코드를 다른 사람들이 정규표현식으로 간단하게 해결하는 것을 보면서, 이제는 공부해야할 때라고 느꼈다. 계속 미뤄만 두고 있었는데 오늘 다른 사람들의 풀이를 보고 화가 나서(ㅋㅋㅋㅋ) 바로 생활코딩 유튜브를 들었다. 예전에 pipe 함수가 너무 어려워서 검색하다가 본 블로그글 중에 "익숙해지면 좋아하게 된다"라는 구절이 생각난다. 정규표현식은 해괴해보여서 항상 기피해왔었는데, 이제는 익숙해져야 할 때. 차근차근하자, 차근차근하게.
let string = "a" // 이렇게 문자열을 변수에 할당하는 것과 같이
// 정규표현식 리터럴
let pattern = /a/; // 찾고자 하는 정보를 pattern이라는 변수에 할당
// 정규표현식 객체 생성자
let pattern = new RegExp("a"); // /a/와 같은 표현
let pattern = new RegExp("a");
pattern.exec("abcdef") // ["a", index: 0, input: "abcde", groups: undefined]
pattern.exec('aaaaa') // ["a", index: 0, input: "aaaaa", groups: undefined]
pattern.exec("ghigkl") // null
let pattern = new RegExp("a");
pattern.test("abcdef") // true
pattern.test("ghigkl") // false
let pattern = new RegExp("a");
"abcdef".match(pattern) // ["a", index: 0, input: "abcde", groups: undefined]
"ghigkl".match(pattern) // null
let pattern = new RegExp("a");
let string = "abcdef";
let replaced = string.replace(pattern, "A") ;
console.log(string) // "abcdef"
console.log(replaced) // "Abcdef"
let string = "Abcde";
let xi = /a/;
let i = /a/i;
xi.test(string); // false
i.test(string); // true
let string = "abcdea";
let xg = /a/;
let g = /a/g;
string.match(xg); // ["a", index: 0, input: "abcdea", groups: undefined]
string.match(g); // ["a", "a"]
() : 그룹을 의미\w : 문자(word)를 의미 (A~Z, a~z, 0~9)+ : 수량자. 앞에 붙여진 정규표현식이 적어도 하나 이상 유효할 때 유효\s : 공백(space)을 의미let string = "coding everybody";
// "문자(한 글자 이상) + 공백 + 문자(한 글자 이상)"을 표현한 정규식
let pattern = /(\w+)\s(\w+)/;
// 패턴에 의거하여 "두 번째 그룹, 첫 번째 그룹"으로 replace
str.replace(pattern, "$2, $1") // everybody, coding
참고자료 : 생활코딩 정규표현식