정규표현식이란?
특정한 조건의 문자를 간편하게 찾을 수 있다. 검색한 문자를 변경하는데 사용하는 경우도 많다.
현재 Front-End개발자를 위해 달려가고 있고, 알고리즘 문제를 JavaScript로 해결하고 있어 이 언어로 설명하겠다.
정규식 생성 방법
JavaScript에서 정규식 생성 방법에는 두가지가 있다.
정규 표현식 리터럴
스크립트가 불러와질 때 컴파일 된다.
정규식에 변수가 없을경우 사용한다.
RegExp 객체
정규식 실행 시점에 컴파일한다. RegExp함수를 호출하여 사용한다.
정규식 패턴이 변경될 수 있는(정규식에 변수 있는) 경우에에는 RegExp를 이용하자.
이제 MDN 문서를 보며 정리를 해보자.
정규 표현식 리터럴
\
특수문자가 아닌 문자 앞에 사용하는 경우
-> 해당 문자는 특별하고, 문자 그대로 해석되면 안됨
b
: 소문자 b가 나오는 패턴과 대응
\b
: 어떤 문자와도 대응되지 않음. 특별한 단어 경계 문자를 형성해버림.
특수문자 앞에 사용하는 경우
-> 다음에 나오는 문자는 특별하지 않고, 문자 그대로 해석
/a*/
: 0개 이상의 문자 a에 대응
/a\*/
: 문자 a*에 대응
RegExp()
에서 \
를 이스케이프 시켜주는것을 잊지 말자.
-> /a\*/
=> new RegExp('a\\*')
^
입력의 시작 부분에 대응
/^a/
: apple 의 a에 대응. 하지만 banana의 a에는 대응하지 않음.
만약 다중행 플래그가 참으로 설정되어 있다면, 줄 바꿈 문자 바로 다음 부분과도 대응됨
[^abc]
: 이와 같이 사용하면 역 문자셋이 됨.
$
^
가 시작 부분에 대응했다면, $
은 끝부분에 대응*
/bo*/
: This is bootstrap의 boo에 대응+
?
앞의 표현식이 0 또는 1회 등장하는 부분과 대응. {0,1} 와 같은 의미.
/e?le?/
: angel의 el 에 대응되고, angle의 le 에 대응되고 또한 oslo의 l에도 대응.
*, +, ?, {}
바로 뒤에 사용하는 경우
-> 가능한 많이 대응시키던 것을, 가능한 적은 문자 대응
/\d+/
: 123ABC에서 123과 대응
/\d+?/
: 123ABC에서 1 과 대응
x(?=y)
x(?!y)
와 같은 사전 검증에도 사용됨
.
/.n/
: nay와 대응되지 않고, on과 대응(x)
/(for) (bar)/
: for bar test에서 for bar와 대응되고, 기억함.(?:x)
/foo{1,2}/
하면 {1,2}가 마지막 o에만 적용되어 동작한다./(?:foo){1,2}/
을 해줘야 {1,2}가 foo 전체에 적용되어 동작한다./abc+/
: abcabc에서 abc매칭. ab뒤에오는 c의 1번 이상 반복되는 문자열 매칭하기 떄문이다./(?:abc)/
: abcabc에서 abcabc 매칭x(?=y)
/Num(?=ber)/
: ber이 뒤따라오는 Num에만 대응x(?!y)
/\d+(?!\.)/
: 소수점이 뒤따라 오지 않는 141에 대응x|y
{n}
/a{2}/
: candy에서는 대응되는 부분이 없지만, caandy에는 aa가 대응됨{n,m}
/a{1,3}/
: caaaaaady에서 3개 까지의 a가 대응[xyz]
-
을 이용해 문자의 범위를 지정할 수 있다./[a-d.]+/
: /[abcd.]+/
와 같은 의미이며, ab.cd 에서 ab.cd 모두에 대응[^xyz]
-
으로 범위 지정 가능./[^abc]/
: cdef에서 d에 대응됨[\b]
\b
/\bm/
: moon에서 m과 대응/oo\b/
: moon에서 대응되는 문자 없음. 문자가 oo로 끝나지 않기 때문이다./n\b/
: moon에서 n에 대응\B
/\B.../
: noonday의 oon에 대응/y\B./
: possibly yesterday. 에서 ye에 대응. y다음 y가 등장하고, y다음 e가 등장한 후 y다음 .(문자아님) 등장하기 때문이다.\cX
\d
\D
\f
\n
\r
\s
/\s\w*/
: foo bar.의 bar에 대응\S
/\S\w*/
: foo bar.의 foo에 대응\t
\v
\w
/\w/
: apple의 a에 대응. $5.28의 5에 대응\W
/\W/
: 50%의 % 에 대응\숫자
/apple(,)\sorange\1/
: apple, orange, cherry, peach. 에서 apple, orange, 가 대응. apple(,)으로 apple,가 대응되고, \sorange으로 공백을 포함한 orange가 대응된다. 그리고 역참조되어 ,까지 대응시켜서 이러한 결과가 나온다.\0
\xhh
\uhhhh
플래그를 사용한 고급검색
정규식 사용
정규식과 함께 쓰이는 메소드
RegExp
String