Javascript




정규 표현식(Regex)

| 이 게시물은 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자리 문자열을 전역 검색합니다.

  • 검색된 내용에서 이전 문자는 변경되지 않고(이미 대문자로 변환됨) 다음 문자는 교체를 위해 소문자로 변환됩니다.

참조

  • 링크는 본문에 있습니다