자바스크립트 정규 표현식에서 특수 문자 이스케이프
특수 문자 자체를 의미하게 만들고 싶다고 가정해 보겠습니다. 이를 위해서는 역슬래시를 사용하여 이스케이프해야 합니다. 예제를 통해 살펴보겠습니다.
예제
다음 예제에서 정규식 작성자는 검색 패턴이 다음과 같이 되기를 원했습니다: 문자
'a', 그 다음 더하기 기호 '+', 그 다음 문자 'x'. 그러나 코드 작성자가
기호 '+'를 이스케이프하지 않았기 때문에 실제 검색 패턴은 다음과 같습니다:
문자 'a'가 한 번 이상, 그 다음 문자 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
결과적으로 변수에는 다음과 같은 값이 기록됩니다:
'a+x ! ! !'
예제
이제 작성자가 더하기 기호를 역슬래시로 이스케이프했습니다. 이제 검색 패턴은 원하는 대로 보입니다: 문자 'a', 그 다음 더하기 기호
'+', 그 다음 문자 'x'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
결과적으로 변수에는 다음과 같은 값이 기록됩니다:
'! ax aax aaax'
예제
이 예제에서 패턴은 다음과 같습니다: 문자
'a', 그 다음 점 '.', 그 다음
문자 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
결과적으로 변수에는 다음과 같은 값이 기록됩니다:
'! abx azx'
예제
다음 예제에서 작성자는 슬래시를 이스케이프하는 것을 잊어버렸고, 이스케이프되지 않은 점은 모든 문자를 의미하므로 정규식이 모든 부분 문자열에 일치하게 되었습니다:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
결과적으로 변수에는 다음과 같은 값이 기록됩니다:
'! ! !'
주의사항
점이 자기 자신을 의미해야 할 때 역슬래시를 잊어버리면 심지어 눈치채지 못할 수도 있다는 점에 주목하세요:
'a.x'.replace(/a.x/g, '!'); // '!'를 반환합니다. 원했던 대로입니다.
시각적으로는 올바르게 작동합니다(점이 모든 문자를 의미하므로 일반 점 '.'도 포함됩니다). 하지만 대체가 이루어지는 문자열을 바꾸면
우리의 실수를 보게 될 것입니다:
'a.x abx azx'.replace(/a.x/g, '!'); // '! ! !'를 반환하지만, '! abx azx'가 예상되었습니다.
특수 문자와 일반 문자 목록
일반 문자를 이스케이프해도 아무 문제가 없습니다 - 여전히 자기 자신을 의미할 것입니다. 예외는 숫자입니다, 숫자는 이스케이프할 수 없습니다.
종종 특정 문자가 특수 문자인지 아닌지 의심스러울 때가 있습니다. 어떤 사람들은 의심스러운 문자들을 모두 이스케이프하기까지 합니다. 그러나 이것은 좋지 않은 습관입니다 (정규식을 역슬래시로 어지럽힙니다).
다음은 특수 문자입니다: $ ^ . * + ? \
/ {} [] () |
다음은 특수 문자가 아닙니다: @ : , ' " ;
- _ = < > % # ~ `& !
실습 문제
다음 문자열이 주어집니다:
let str = 'a.a aba aea';
문자열 'a.a'를 찾고 나머지는 찾지 않는 정규식을 작성하세요.
다음 문자열이 주어집니다:
let str = '2+3 223 2223';
문자열 '2+3'를 찾고 나머지는 찾지 않는 정규식을 작성하세요.
다음 문자열이 주어집니다:
let str = '23 2+3 2++3 2+++3 345 567';
문자열 '2+3', '2++3', '2+++3'를 찾고 나머지는 찾지 않는 정규식을 작성하세요
(더하기 기호는 임의의 개수일 수 있습니다).
다음 문자열이 주어집니다:
let str = '23 2+3 2++3 2+++3 445 677';
문자열 '23', '2+3', '2++3',
'2+++3'를 찾고 나머지는 찾지 않는 정규식을 작성하세요.
다음 문자열이 주어집니다:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
문자열 '*q+', '*qq+', '*qqq+'를 찾고 나머지는 찾지 않는 정규식을 작성하세요.
다음 문자열이 주어집니다:
let str = '[abc] {abc} abc (abc) [abc]';
대괄호 안의 문자열을 찾아 '!'로 대체하는 정규식을 작성하세요.