http://thefarmersfront.github.io/blog/reg-exp-01/
정규식(Regular Expression)과 슬랙 채널 공유로 주문서 이름에 특수 문자 입력을 막은 에피소드
주문자 이름에 특수 문자가 입력이 되지 않게 하라!
위와 같은 특명이 티켓과 함께 나에게 주어졌다. 주문자 이름에 특수 문자가 들어가면 백엔드 시스템에서 오류가 나고 있었던 상황이었다.
여기서 잠깐 개발자들이 좀처럼 꺼려하는 까칠한 우리 규식이 형을 잠시 소개하고 시작하는게 좋겠다.
규식이 형 말투는 주로 /정규 표현식/[플래그] 와 같이 이루어져 있다. 예) /\\w\\d/gi;
여기서 \\w\\d
가 '정규표현식'이고 gi
가 '플래그'다.
아래 기본 표현식과 플래그 정도만 알아도 웬만한 형의 말투는 대부분 이해할 수 있을 것이다.
표현식 | 설명 |
---|---|
x | y |
예) /green | red/는 "green apple"에서 "green"과 매치, "red apple"에서 "red"와 매치 |
[x] | []안의 한 문자와 일치예) [abc] a b c 중 한 문자와 일치 |
(x) | ()안의 문자들을 메모리에 할당,예) (bo)y boy중 bo는 $1로 치환할 수 있음 |
(?:x) | ()안의 문자들을 메모리에 할당 하지 않음,예) (?:boy |
^ | 라인의 시작 지점과 매치주의) [^0-9] []안의 ^는 Not을 의미함(예제는 숫자가 아닌 모든 문자) |
$ | 라인의 끝 지점과 매치 |
[a-z] | 알파벳 소문자와 매치, [A-Z]는 대문자와 매치 |
\d (digit) | 숫자와 매치, [0-9]와 동일 |
\w (word) | 알파벳 대소문자, 숫자 및 (언더바)와 매치, [A-Za-z0-9] 와 동일 |
\s | 스페이스, 탭, 줄바꿈 문자(White space character) 문자와 매치예) /\s\w*/는 "foo bar"에서 " bar"와 매치 |
\r | 개행 문자(Carriage return) |
\n | 개행 문자(Line feed) |
. | 개행 문자(\n, \r, \u2028 or \u2029)를 제외한 임의의 모든 문자와 매치 |
x? | x를 포함하거나 포함하지 않아도 매치(1번 또는 0번) |
x+ | 반드시 하나 이상 x를 포함하는 문자와 매치예)"boo bii foo".replace(/(bo+)/g, "($1)");는 "(boo) bii foo"를 출력 |
x* | x를 포함하거나 포함하지 않아도 모두 매치예)"boo bii foo".replace(/(bo*)/g, "($1)");는 "(boo) (b)ii foo"를 출력 |
\대문자는 \소문자의 반대를 뜻한다. 예를 들어 \D는 [^\d], 즉 [^0-9]와 같은 의미이며 숫자를 제외한 모든 문자와 매치 된다. \S는 [^\s]와 같으며 스페이스, 탭, 줄바꿈 문자를 제외한 모든 문자와 매치 된다.
각 예제 코드는 브라우저 콘솔 창에서 테스트 가능하다.
'Larry is unhappy'.replace(/^(larry).+(happy)$/i, '$2 $1');
// 'happy Larry'가 출력됨
// ^ : 시작 $ : 끝 $1는 첫번째 괄호 $2는 두번째 괄호와 매치
규식이 형 曰 : 각 회사명이 컴마 구분자로 연결되어서 출력되도록 하라!
const text= `Apple
Google
Kurly`;
const re = /\\r?\\n/; // 윈도우(\\r\\n) 유닉스(\\n) 환경에서 줄바꿈 문자와 매치
text.split(re).join(", ");
// 'Apple, Google, Kurly'가 출력됨