⊗jsSpREGL 101 of 294 menu

자바스크립트 정규식에서 탐욕성 제한하기

정규 표현식은 기본적으로 탐욕적입니다. 이는 가능한 최대한 많은 문자를 포착한다는 의미입니다. 예를 들어 살펴보겠습니다. 다음과 같은 문자열이 있다고 가정해 봅시다:

let str = 'aeeex zzz x kkk';

이 문자열에서 다음 패턴을 사용하여 하위 문자열 'aeeex'를 찾고자 합니다: 문자 'a', 그 다음 임의의 문자가 하나 이상, 그 다음 문자 'x'.

let res = str.replace(/a.+x/g, '!');

결과 변수에 문자열 '! zzz x kkk'가 기록될 것으로 예상합니다. 그러나 그렇지 않습니다 - 변수에 문자열 '! kkk'가 들어갑니다.

문제는 우리의 정규식이 문자 'a'에서 문자 'x'까지의 모든 문자를 찾는다는 점입니다. 하지만 우리 문자열에는 두 개의 문자 'x'가 있습니다! 탐욕성 때문에 정규식이 마지막 x까지 찾게 되어 우리가 예상한 것과 다른 것을 포착하게 됩니다.

물론 종종 이런 동작이 우리가 원하는 것입니다. 하지만 이 특정 경우에는 탐욕성을 취소하고 정규식이 첫 번째 x까지 찾도록 하고 싶습니다.

탐욕성을 제한하려면 반복 연산자 뒤에 물음표를 붙이면 됩니다:

let res = str.replace(/a.+?x/g, '!');

모든 반복 연산자에 대해 탐욕성을 제한할 수 있습니다: *, ?, {} 모두 - 다음과 같이: *?, ??{}?.

문자열이 주어집니다:

let str = 'aba accca azzza wwwwa';

양쪽 끝에 문자 'a'가 있는 모든 문자열을 찾고, 각각을 '!'로 대체하는 정규식을 작성하세요. 문자 'a' 사이에는 임의의 문자('a' 제외)가 있을 수 있습니다.

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부