다양한 프로그래밍 언어에서 사용되는 Regex(RegExp)에 대해서 알아보자
코드를 짜다보면, 가끔식 볼 수 있는 Regex이다. 이게 뭔지 자세히 알아본 적은 없는데 한번은 짚어보고 넘어가도 좋을 것 같은 주제이다.
정규 표현식은 문자 패턴이다. 이 패턴은 문자열에서 문자(캐릭터)를 찾거나(searching) 대체할 때(replacing) 사용된다.
W3School Javascript RegExp Reference 참조
먼저, 이 정규 표현식에는 Modifiers가 존재한다.
W3School에서 제공한 3가지 Modifiers 예시를 보자!

첫 번째로 /g는 모든 일치 항목을 해당 문자열에서 찾는 것이다.
만약 "hi hi hi"가 있다면 /hi/g로 서치했을 때 세 개의 hi 모두 반환한다는 것이다.
두 번째는 /i이다. 위에서 확인했다싶이 case-insensitive 매칭이기에 대소문자를 구분하지 않고 같은 문자를 찾는다.
예를 들어 "hi Hi Hi hi"가 있을 때 /hi/i로 찾는다면 4개의 hi/Hi 모두 반환한다.
세 번째로는 /m이다. 이건 여러줄의 문자열을 서칭할 때 사용한다. 만약 "hello/nhi/nHi"가 있을 때 /^hi$/gm 으로 찾는다면, 두 번째 줄에 있는 hi를 찾아 반환한다.
여기서 궁금한 ^(Caret)와 $(Dollar)
^(Caret)는 문자열의 시작을 의미한다. 그래서 "bye hi hello"라는 문자열에서 /^hi/로 hi를 찾는다면, 이 문자열의 시작에는 bye가 존재하기에 매칭이 되지 않는다.
$(Dollar)는 문자열의 끝을 의마한다. 위의 예시를 이어 들어보자면, /hi$/로 서칭을 한다면, 이 문자열의 끝에는 hello가 존재하기에 역시나 매칭이 되지 않는다.

출처: W3School
첫 번째 [abc]는 괄호 안에 있는 문자들 중 문자열이 갖고 있는 것을 찾는 것이다.
두 번째는 ^를 맨 앞에 추가해줌으로써 위와는 반대가 된다. 괄호 안에 있는 문자를 제외한 문자열이 갖고 있는 아무 문자를 찾는 것이다.
첫 번째와 두 번째 예시와 같이 [0-9]와 [^0-9]로 마찬가지이다.
마지막 (x|y)는 x나 y 둘 중 하나라도 일치하는 것을 찾는 것이다. 두 가지 모두 다 문자열이 포함하고 있다면 첫 번째 문자를 반환한다.
이 메타캐릭터가 뭐냐면, 특정 의미를 갖고 있는 문자들을 뜻한다.
W3School에서 제공하는 Metacharacters의 예시 일부를 가져와봤다.

이 메타캐릭터들은 모두 // 안에 넣어주는 것들이며 몇 가지 예시만 천천히 살펴보자.
먼저 .(Dot)은 와일드카드이다. .를 넣어주면 이 부분은 아무 거나 와도 허용한다는 뜻이다. (기본적으로 줄 바꿈 문자는 포함하지 않는다)
예를 들어, "dog dag dig dug"라는 문자열에 /d.g/g로 찾아본다면 저 문자열 내 모든 단어가 매칭이 된다는 뜻이다.
그 다음 \w는 문자(캐릭터)를 찾는 표현이다. 이는 영문(대소문자)와 숫자 그리고 _(언더스코어)를 포함한다. "Hello!"에서 /\w/를 사용한다면. "H", "e", "l",
"l", "o"를 반환 할 것이다.
그와 반대로 \d는 숫자를 찾는 표현이다. 문자열 내에 숫자가 있다면 숫자만을 하나씩 반환한다는 것이다.
만약 문자나 숫자가 하나씩 반환하는 것이 아닌 하나의 연속된 단어로 반환하고 싶다면 \w+ 또는 \d+를 사용하면 된다.
그 외 여러가지 표현법이 있는데, 이건 문서를 찾아보거나 W3School의 설명을 봐도 좋을 듯하다.
https://www.w3schools.com/jsref/jsref_obj_regexp.asp
그 다음, RegExp Objects (정규 표현식 메소드)가 있다.
RegExp 객체는 자바스크립트에서 정규 표현식을 다루기 위한 객체로, 다양한 메소드를 제공한다고 한다. 예시는 아래에 있다.

여기서 확인 할 수 있듯이, compile은 더이상 사용하지 않는다. 그를 제외하고 하나씩 살펴보자.
첫 번째의 exec()은 문자열에서 표현식에 매칭되는 문자를 배열로 반환한다. 배열에는 매칭되는 문자, 그의 인덱스, 매칭 확인한 문자열, groups가 함께 포함된다.

그 다음, test()는 Boolean으로 값을 리턴하며, 문자열 내에 서칭한 문자가 포함하고 있는지에 대한 true or false을 나타낸다.

마지막으로는 RegExp 객체를 문자열로 반환해주는 toString()이 있다.

이 외에 RegExp 객체 메소드가 아닌 String 객체 메소드에 Reg를 인자로 넣어줄 수 있는 예시가 두 가지 있다.
match()와 search()
이 두 개의 예시를 찾아보자.
첫 번째로 match()는 정규 표현식과 매칭되는 부분을 찾아 배열로 반환한다.

두 번째의 search()는 문자열에서 정규 표현식이 포함되는 첫 번째 위치를 반환한다. 매칭되는 것이 없다면 -1을 반환한다.

이것들 이외에도 다른 요소들을 찾아볼 수 있으며, 문서를 확인하면서 정규 표현식을 사용할 때 적용하면 되겠다!