JavaScript 정규식 패턴 정리
2020. 7. 22. 17:18ㆍ공부내용 공유하기
개인 확인 및 공부용입니다.
// 정규식 패턴 (Regex Pattern)
// 단순 패턴 사용하기
// /hi/ --> 문자열에서 정확히 'hi'부분이 나타나야 대응됩니다.
// 특수 문자 사용하기
// \ --> 특수 문자가 아닌 문자 앞에서 사용되면 해당 문자는 특별한 명령어로 간주됩니다.
// ex) \b 는 단어 경계에 대응됩니다.
// ^ --> 입력의 시작 부분에 대응합니다.
// ex) /^A/ 는 "an A" 의 'A'와는 대응되지 않습니다, 그러나 "An E" 의 'A'와는 대응됩니다.
// $ --> 입력의 끝 부분과 대응됩니다.
// ex) /t$/ 는 "eater" 의 't'에는 대응되지 않습니다, 그러나 "eat" 과는 대응됩니다.
// * --> 앞의 표현식이 0회 이상 연속으로 반복되는 부분과 대응됩니다.
// ex) /bo*/ 는 "A ghost booooed" 의 'boooo' 와 대응되고, "A bird warbled" 의 'b'에 대응되지만 "A goat grunted" 내의 어느 부분과도 대응되지 않습니다.
// + --> 앞의 표현식이 1회 이상 연속으로 반복되는 부분과 대응됩니다.
// ex) /a+/ 는 "candy"의 'a'에 대응되고 "caaaaaaandy" 의 모든 'a'들에 대응되지만, "cndy" 내의 어느 부분과도 대응되지 않습니다.
// ? --> 앞의 표현식이 0 또는 1회 등장하는 부분과 대응됩니다.
// ex) /e?le?/ 는 "angel"의 'el' 에 대응되고, "angle"의 'le' 에 대응되고 또한 "oslo" 의 'l'에도 대응됩니다.
// . --> 개행 문자를 제외한 모든 단일 문자와 대응됩니다.
// ex) /.n/는 "nay, an apple is on the tree"에서 'an'과 'on'에 대응되지만, 'nay' 에는 대응되지 않습니다.
// (x) --> 'x'에 대응되고, 그것을 기억합니다.
// ex) 패턴 /(foo) (bar) \1 \2/ 안의 '(foo)' 와 '(bar)'는 문자열"foo bar foo bar"에서 처음의 두 단어에 대응되고 이를 기억합니다.
// 패턴 내부의 \1와 \2는 문자열의 마지막 두 단어에 대응됩니다.
// x|y --> 'x' 또는 'y'에 대응됩니다.
// ex) /green|red/는 "green apple"의 'green'에 대응되고, "red apple."의 'red'에 대응됩니다.
// {n} --> 앞 표현식이 n번 나타나는 부분에 대응됩니다. n은 반드시 양의 정수여야 합니다
// ex) /a{2}/는 "candy,"의 'a'에는 대응되지 않지만, "caandy,"의 모든 a 와, "caaandy."의 첫 두 a 에는 대응됩니다.
// {n,m} --> n과 m은 양의 정수이고, n <= m를 만족해야 합니다. 앞 문자가 최소 n개, 최대 m개가 나타나는 부분에 대응됩니다. m이 생략된다면, m은 ∞로 취급됩니다.
// ex) /a{1,3}/는 "cndy"에서 아무것에도 대응되지 않지만, "caandy,"의 첫 두 a 와 "caaaaaaandy"의 첫 세 a 에 대응됩니다. "caaaaaaandy"에서 더 많은 a 들이 있지만, "aaa"에만 대응된다는 점에 주목하세요.
// [xyz] --> 문자셋(Character set) 입니다. 이 패턴 타입은 괄호 안의 어떤 문자(이스케이프 시퀀스까지 포함)와도 대응됩니다. 하이픈을 이용하여 문자의 범위를 지정해줄 수 있습니다.
// ex) 패턴 [a-d] 는 패턴 [abcd] 와 똑같이 동작하며, "brisket"의 'b' 에 일치하고, "city"의 'c' 에 일치합니다. 패턴 /[a-z.]+/ 와 /[\w.]+/ 는 "test.i.ng" 전체 문자열이 일치합니다.
// [^xyz] --> 부정 문자셋(negated character set) 또는 보충 문자셋(complemented character set)입니다. 괄호 내부에 등장하지 않는 어떤 문자와도 대응됩니다.
// ex) 패턴[^abc]는 패턴[^a-c]와 동일합니다. 두 패턴은 "brisket"의 'r', "chop."의 'h' 에 대응됩니다.
// [\b] --> 백스페이스(U+0008)에 대응됩니다. 이와 같이, 백스페이스 문자 리터럴에 대응시키려면, 대괄호("[]")를 이용해야만 합니다.
// \b --> 단어 경계에 대응됩니다. 단어 경계는 다른 '단어 문자'가 앞이나 뒤에 등장하지 않는 위치에 대응됩니다.
// ex) /\bm/는 "moon"의 'm'에 대응됩니다 /oo\b/ 는 "moon"의 'oo' 부분에 대응되지 않는데, 왜냐하면 'oo'를 뒤따라오는 'n'이 단어경계가 아니기 때문입니다.
// \B --> 단어 경계가 아닌 부분에 대응됩니다. 문자열의 시작 부분과 끝 부분은 단어가 아닌 것으로 간주됩니다.
// ex) /\B../ 는 "noonday"의 'oo'와 대응되며, /y\B./ 는 "possibly yesterday."의 'ye'와 대응됩니다.
// \d --> 숫자 문자에 대응됩니다. [0-9]와 동일합니다.
// ex) /\d/ 또는 /[0-9]/는 "B2 is the suite number."에서 '2'에 대응됩니다.
// \D --> 숫자 문자가 아닌 문자에 대응됩니다. [^0-9]와 동일합니다.
// ex) /\D/ 또는 /[^0-9]/는 "B2 is the suite number."의 'B'에 대응됩니다.
// \s --> 스페이스, 탭, 폼피드, 줄 바꿈 문자등을 포함한 하나의 공백 문자에 대응됩니다.
// \S --> 공백 문자가 아닌 하나의 문자에 대응됩니다.
// ex) /\S\w*/는 "foo bar."의 'foo' 에 대응됩니다.
// \w --> 밑줄 문자를 포함한 영숫자 문자에 대응됩니다. [A-Za-z0-9_] 와 동일합니다. 단어문자입니다.
// ex) /\w/는 "apple,"의 'a' 에 대응되고, "$5.28,"의 '5'에 대응되고,"3D."의 '3'에 대응됩니다.
// \W --> 단어 문자가 아닌 문자에 대응됩니다. [^A-Za-z0-9_] 와 동일합니다.
// ex) /\W/ 또는 /[^A-Za-z0-9_]/는 "50%."의 '%' 에 대응됩니다.
// \n --> 정규식 내부의 n번째 괄호에서 대응된 부분에 대한 역참조 입니다. 여기서, n은 양의 정수입니다.
// ex) /apple(,)\sorange\1/는 "apple, orange, cherry, peach."의 'apple, orange,' 에 일치합니다.
// \0 --> 널 (U+0000)문자에 대응합니다. 이 때 다른 숫자를 뒤에 쓰지 마세요. 왜냐하면 \0<digits>는 8진 이스케이프 시퀀스이기 때문입니다.
// \f, \n, \r, \t, \v --> 각각 폼피드 (U+000C) , 줄 바꿈 (U+000A) , 캐리지 리턴(U+000D) , 탭 (U+0009) , 수직 탭(U+000B) 에 대응됩니다.