회사에서 jsp로 개발을 하는데, 정규식을 쓸 일이 많다. 구글링으로 몇 번 봐서 했기 때문에, 대충 할 줄은 아는데, 대충 공부해서 그런지 자꾸 까먹어서 다시 공부한다.
파이팅
✦ exec, test 는 문자열을 인수로 받지만, match는 정규표현식을 인수로 받는다.
const target = 'Is this all there is?'; const regExp = /is/; regExp.exec(target); regExp.test(target); target.match(regExp);
{m,n}은 최소 m번, 최대 n번 반복되는 문자열을 의미한다.
콤마 뒤에 공백이 있으면 안된다.
/A{2,3}/ 을 하면, 'A'가 최소 2번 최대 3번 반복되는 문자열을 의미한다.
/A{2}/ 을 하면, 'A'가 2번 반복되는 문자열을 의미한다.
/A{2,}/ 을 하면, 'A'가 최소 2번 최대 상관없이 반복되는 문자열을 의미한다.
+는 앞선 패턴이 최소 한 번 이상 반복되는 문자열을 의미한다.
즉, +는 {1,}과 같다.
/A+/를 하면, 'A'가 최소 1번 최대 상관없이 반복되는 문자열을 의미한다.
?는 앞선 패턴이 최대 한 번(0번 포함)이상 반복되는 문자열을 의미한다.
즉, ?는 {0,1}과 같다.
/colou?r/를 하면, color 혹은 colour과 매치한다.
|는 or의 의미를 갖는다.
/A|B/를 하면, 'A' 또는 'B'를 의미한다.
[]를 이용하면 더 간단하게 표현이 가능한데, 그 이유는 []내의 문자는 or로 동작하기 때문이다.
/[AB]/를 하면, 'A', 'B'가 매치된다.
범위를 지정하려면 [] 내에 -를 사용한다.
/A-Z/를 하면, 'A',...,'Z'가 매치된다.
\d는 숫자를 의미한다. ( <-> \D는 숫자가 아닌 문자다.)
즉, \d는 [0-9]와 같다.
\w는 알파벳, 숫자, 언더스코어를 의미한다. ( <-> \W는 반대다.)
즉, /[A-Za-z0-9_]/와 같다.
[]밖의 ^은 문자열의 시작을 의미한다. []안의 ^(not)과 구분하도록 한다.
즉, /^http/는 'http'로 시작하는지 검사한다.
$는 문자열의 마지막을 의미한다.
즉, /com/는 'com'으로 끝나는지 검사한다.
(velog에러때매 $ 일부러 안해놈)
✦ 정리하면,
. 은 무슨 문자인지 상관없이 문자개수만 정하고 싶을 때 사용한다.
{m,n}은 원하는 문자열의 반복횟수를 정할 수 있는데, 만약 {1,}이라면 +로 대체가능하고, {0,1}이라면 ?로 대체가능하다.
|는 or역할인데, []안에서 적으면 생략가능하다. 여기서 범위를 지정하려면 -를 사용하면 된다. 추가로 부정하려면 ^을 사용하면 된다.
\d는 숫자, \D는 문자, \w는 알파벳과 숫자 _ , \W는 \w의 반대다.
[]밖에서 ^을 사용하면 문자열의 시작을 의미하고, 추가로 $를 사용하면 문자열의 마지막을 의미한다.
/^https?:\/\//.test(url);
/html$/.test(url);
/^\d+$/.test(target);
/^\s+/.test(target);
/^[A-Za-z0-9]{4,10}$/.test(id);
/^\d{3}-\d{3,4}-\d{4}$/.test(cellphone);
/[^A-Za-z0-9]gi/.test(target);
target.replace([^A-Za-z0-9]gi, '');