티스토리 뷰
[모던자바스크립트] 12.3 패턴 매칭을 하는 문자열 메서드
:프로그램 안에서 정규 표현식으로 문자열을 처리하는 방법
12.3.1 문자열 검색하기
- search 메서드
: 인수로 받은 정규 표현식 객체와 일치한 최초 문자열의 첫 번째 문자 위치를 반환합니다.
일치하는 문자열을 찾지 못했을 때는 -1을 반환합니다. , 원본 문자열을 수정하지 않습니다.
인수가 정규 표현식 객체가 아닐 때는 RegExp 생성자를 사용하여 묵시적으로 정규 표현식 객체를 만든 후에 실행합니다.
이때 인수에 \d 등의 이스케이프된 문자를 지정하려면 \ 자체를 이스케이프해서 \\d라고 표기해야 합니다.
또한 search 메서드는 전역 검색을 지원하지 않습니다.
따라서 g플래그를 설정해도 무시합니다.
백트래킹과 폭발적인 매칭, DoS공격
백트래킹 : 정규 표현식은 대상 문자열이 정규 표현식 패턴과 일치하는지 판정할 때 정규 표현식으로 포착할 수 있는 패턴을 발견 할 때까지 검색을 여러 번 되풀이 합니다. 정규 표현식 /\d+\d/에 문자열 "123"을 매칭하는 과정을 예로 들어 보겠습니다.
1) 먼저 \d+ 부분과 "123"이 일치합니다. 하지만 "123"다음에 \d와 일치하는 숫자가 없습니다. 바로 이전의 패턴인 \d+로 되돌아가서 문자열을 처음부터 다시 검색합니다.
2) 이번에는 \d+ 를 "12"와 매칭합니다. "12"다음의 "3"과 \d가 일치하므로 검색을 종료합니다.
정규 표현식에서는 왼쪽 패턴부터 차례대로 문자열과 이리하는지 확인합니다. 이때 그다음 패턴이 일치하지않으면 바로 이전 패턴으로 되돌아가 이전과는 다른 부분 문자열과 매칭합니다. 이것을 백트래킹이라고 합니다.
Dos공격
: 모든 처리 내용을 정규 표현식만으로 구현하려 복잡한 정규 표현식을 만들려고 할때 발생하기 쉽ㄴ습니다.
이러한 정규 표현식 처리가 되레 보안 취약점이 되어 웹 사이트에 DoS(Denial-of-Service, 서비스 거부)공격을 허용할 수 있습니다.
서버나 네트워크에 의도적으로 과도한 부하를 걸어 서비스의 정상적인 운영을 방해하는 공격을 말합니다.
정규표현식을 동원하여 DoS공격을 방지할 때도 모든 코드를 정규 표현식으로만 작성하려 시도하지 마십시오.
일반적인 문자열 메서드로 문자열 확인인하고 문자열을 여러 개로 분리하고 이를 간단한 정규 표현식으로 처리하도록 구현하는 편이 낫습니다. 의도하지 않은 보안 취약점을 만드는 것을 막을 수 있고 프로그램의 유지 보수에도 유리하기 때문입니다.
12.3.2 문자열 치환하기
- replace 메서드 : 첫 번째 인수로 받은 정규 표현식과 일치하는 문자열을 검색하고 두 번째 인수로 받은 문자열로 치환한 새로운 문자열을 반환합니다. 원본 문자열을 고치지 않습니다.
12.3.3 문자열 추출하기
- match 메서드 : 첫 번째 인수로 받은 정규 표현식과 일치하는 문자열을 순서대로 저장해서 배열로 반환합니다. metch 메서드는 원본 문자열을 수정하지 않습니다.
12.3.4 문자열 나누기
- split 메서드 : 첫 번째 인수로 문자열을 분할한 다음에 배열에 담아서 반환합니다.
첫 번째로는 문자열 또는 정규 표현식 객체를 넘깁니다. 첫 번째 인수를 생략하면 원본 문자열 전체를 배열에 담아서 반환합니다.
split 메서드는 원본 문자열을 수정하지 않습니다.
See the Pen [Javascript] 패턴 매칭을 하는 문자열 메서드 by jeongahlee (@jeongahlee) on CodePen.
'JAVASCRIPT' 카테고리의 다른 글
[Javascript] 웹 브라우저의 객체 (0) | 2020.06.01 |
---|---|
[Javascript] RegExp객체 (0) | 2020.05.24 |
[Javascript] gallary view (0) | 2020.05.13 |
[Javascript] 정규표현식 (0) | 2020.05.10 |
[javascript] 객체 (프로퍼티의 속성, 객체 잠그기) (0) | 2020.04.26 |