| 이 게시물은 2020년 7월 15일에 작성된 기사에서 가져온 것입니다.
1. 정규 표현식
정규식이라고도 하며 특정 규칙이 있는 일련의 문자열을 표현하는 데 사용됩니다.
이러한 패턴은 RegExp에 있습니다. 경영진 · 시험 방법,
그리고 문자열 맞다 · 대리자 · 구하다 · 분할 메서드와 함께 사용됩니다.
정규 표현식을 생성하는 방법
정규식을 만드는 방법에는 두 가지가 있습니다.
문자 그대로
var re = /ab+c/;
var re2 = /ab+c/gi; // 플래그 g, i 사용
- /로 묶인 패턴을 리터럴로 사용
- 코드 작성 시점에 패턴이 알려진 대부분의 경우에 사용됨
생성자 함수 메서드
var re = new RegExp("ab+c");
var re2 = new RegExp("ab+c", "gi"); // 플래그 g, i 사용
- RegExp 객체의 생성자 함수 호출
- 주로 정규 표현식의 패턴이 변경될 수 있거나 패턴을 동적으로 검색해야 하는 경우에 사용됩니다. B. 사용자 입력에서.
2. 정규식 패턴
의미(함수)가 있기 때문에 표현식의 다양한 특수 문자(패턴)를 인식하는 것이 중요합니다.
기본 정규식 구문
| 소식 | 의미 | 예 |
|---|---|---|
| ^^ | 입력 시작 부분에서 일치 | /^abc/ |
| $ | 입력 끝에서 일치 | /abc$/ |
| . | 개행 문자를 제외한 모든 단일 문자(한 문자)와 일치합니다. | /.기원전/ |
| | | 왼쪽 또는 오른쪽 맞춤 | /a|bc/ |
| \ | 특수 문자 예외 처리(Escape) | /100\$/ |
| * | 이전 식의 0개 이상의 연속 반복과 일치합니다. {0,}와 동일 | /10*/ |
| + | 앞의 표현식이 한 행에서 한 번 이상 반복되는 곳을 찾습니다. {1,}과 동일 | /10+/ |
| ? | 선행 표현식의 0개 또는 1개 항목을 일치시킵니다. {0,1}과 동일 | /10?/ |
| {N} | 선행 표현식의 n(정수) 항목과 일치 | /10{0}/ |
| {N, } | 앞의 표현식이 n개 이상 발생하는 항목과 일치 | /10{1,}/ |
| {n,m} | 앞의 표현식이 m회 이하로 n회 이상 일치합니다. | /10{0,1}/ |
| x(?=y) | 앞으로 검색하십시오. ‘x’ 다음에 y가 오는 부분과 일치 | /10*(?=원)/ |
| x(?!y) | 네거티브 전방 검색. x 뒤에 y가 없는 ‘x’ 부분과 일치 | /$10)/ |
| () | 문자 집합. 괄호 안의 모든 문자와 일치(특수 문자 포함) | /(알파벳)/ |
| (^) | 부정적인 문자 집합입니다. 괄호로 묶이지 않은 모든 문자와 일치 | (^dz) |
| (아즈) | a에서 z까지의 소문자 영문자를 일치시킵니다. | /(아즈)/ |
| (\비) | 백스페이스와 동일(U+0008) | /(\비)/ |
| \비 | 단어 경계를 조정합니다. 앞이나 뒤에 다른 “단어 문자”가 없는 모든 위치와 일치합니다. | /10*\b/ |
| \디 | 모든 숫자와 일치합니다. (0-9)와 동일 | /\디/ |
| \디 | 숫자가 아닌 모든 문자와 일치합니다. (^0-9)와 동일 | /\디/ |
| \에스 | 단일 공백과 일치합니다. (공백, 탭 등) | /\에스/ |
| \에스 | 공백이 아닌 단일 문자와 일치 | /\에스/ |
| \w | 일치 단어 문자와 동일(A-Za-z0-9_) | /\w/ |
| \W | 단어가 아닌 모든 문자와 일치합니다. (^A-Za-z0-9_)와 동일 | /\승/ |
- 단어 문자: JavaScript에서는 대소문자 52개 + 숫자 10개 + 밑줄 1개 총 63자를 단어 문자라고 합니다.
참조 페이지
세 번째 깃발
정규 표현식은 전역 또는 대소문자를 구분하지 않는 검색을 허용하는 6개의 플래그를 설정할 수 있습니다.
이러한 플래그는 개별적으로 또는 임의의 순서로 함께 사용할 수 있습니다.
| 깃발 | 설명 |
|---|---|
| G | (글로벌 검색) 글로벌 검색. 패턴과 일치하는 것을 찾으십시오. g 플래그가 없으면 패턴과 일치하는 첫 번째 결과만 반환됩니다. |
| 나 | (대/소문자 참고) 검색은 대소문자를 구분하지 않습니다. A와 a를 같은 문자로 취급 |
| 중 | (여러 줄) 여러 줄 검색. 문자열이 래핑된 경우에도 검색 |
| 에스 | (하나의 선) 마침표(.)에는 개행 문자(\n)도 포함됩니다. |
| 그리고 | (유니코드) 완전한 유니코드 지원 |
| 제이 | (어려운) 텍스트의 특정 위치(lastIndex 속성으로 지정된 인덱스)에서 검색합니다. g 플래그와 함께 사용하면 g는 무시됩니다. 브라우저에서 지원하지 않을 수 있습니다. |
4. 문제 해결
IP 주소 훼손
https://leetcode.com/problems/defanging-an-ip-address/
문제: IP에서 . (.)로 교체하여 반환합니다.
문제를 해결하다)
var defangIPaddr = function(address) {
return address.replace(/\./g, "(.)");
// return address.replace(/(.)/g,"(.)");
};
- . (.)로 찾아서 바꾸기
휴대폰 번호 숨기기
https://programmers.co.kr/learn/courses/30/lessons/12948
문제: 전화번호 뒷자리 4자리를 제외한 모든 숫자가 *인 문자열을 반환해야 합니다.
문제를 해결하다)
function solution(phone_number) {
return phone_number.replace(/\d(?=\d{4})/g, "*")
}
- 패턴(?=)을 사용한 후, 숫자 뒤에 4자리 숫자가 전역적으로 검색되어 *로 대체됩니다.
이상한 캐릭터 만들기
https://programmers.co.kr/learn/courses/30/lessons/12930
문제: 문자열 s는 하나 이상의 단어로 구성되며 각 단어는 하나 이상의 공백으로 구분됩니다.
각 단어의 짝수 문자가 대문자로 변환되고 홀수 문자가 소문자로 변환된 문자열을 반환해야 합니다.
예) “try hello world”는 “try hello world”를 반환합니다.
문제를 해결하다)
function solution(s) {
return s.toUpperCase().replace(/(\w{2})/g, function(a){return a(0)+a(1).toLowerCase()})
// == /(\w)(\w)/g
}
-
모든 문자열을 대문자로 변환한 후 2자리 문자열을 전역 검색합니다.
-
검색된 내용에서 이전 문자는 변경되지 않고(이미 대문자로 변환됨) 다음 문자는 교체를 위해 소문자로 변환됩니다.
참조
- 링크는 본문에 있습니다
