⊗jsSpRERMC 127 of 294 menu

JavaScript 정규식에서 replace 메서드의 콜백

replace 메서드는 두 번째 매개변수로 문자열뿐만 아니라 콜백 함수도 받을 수 있습니다. 이 함수는 발견된 각 일치 항목에 적용됩니다. 정규식이 찾은 각 부분 문자열은 그 부분 문자열에 대해 이 함수가 반환하는 값으로 대체됩니다.

이 함수에는 매개변수를 전달할 수 있습니다: 첫 번째 매개변수에는 발견된 문자열이, 두 번째 매개변수에는 첫 번째 캡처 그룹(괄호)이, 세 번째 매개변수에는 두 번째 캡처 그룹이 들어갑니다. 이런 식으로 정규 표현식에 있는 캡처 그룹의 수만큼 매개변수를 만들 수 있습니다.

마지막에서 두 번째 매개변수에는 발견된 일치 항목의 위치가, 마지막 매개변수에는 검색이 수행되는 전체 문자열이 들어갑니다.

이 모든 것이 어떻게 작동하는지 실제 예제를 통해 살펴보겠습니다.

예제

숫자가 있는 문자열이 주어졌다고 가정해 봅시다:

let str = '2 3 4 5';

이 숫자들을 제곱으로 바꿔봅시다. 먼저 콜백 함수에서 숫자를 하나씩 콘솔에 출력해 보겠습니다:

str.replace(/\d+/g, function(match) { console.log(match); });

이 코드는 먼저 '2'를, 그다음 '3', '4', 그리고 '5'를 출력할 것입니다. 즉, match 변수에는 정규식이 찾은 문자열이 순차적으로 들어갑니다.

이제 문제를 완전히 해결해 봅시다 - match를 제곱하고 return으로 반환하겠습니다. 그러면 발견된 2에 대해 4가 반환되고 2는 이 4로 대체되며, 발견된 3에 대해 9가 반환되고 3은 이 9로 대체됩니다 - 이런 식으로 진행됩니다:

let result = str.replace(/\d+/g, function (match) { return match**2; }); console.log(result); // '4 9 16 25'를 출력합니다

예제

이제 문자열에 '2+3=' 형식의 구조가 주어졌다고 가정해 봅시다:

let str = '2+3= 4+5= 6+7=';

등호 뒤에 해당 숫자들의 합이 들어가도록 만들어 봅시다. 즉, 우리의 문자열은 다음과 같이 변해야 합니다:

'2+3=5 4+5=9 6+7=13'

문제를 해결하기 위해 다시 실험해 보겠습니다 - 첫 번째와 두 번째 피연산자를 별도의 캡처 그룹으로 분리하겠습니다:

str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) { console.log(match0, match1, match2); });

이제 문제를 최종적으로 해결해 보겠습니다: 각 발견된 부분 문자열에 대해 첫 번째와 두 번째 캡처 그룹을 합산하고, 영번째 캡처 그룹(발견된 문자열, 예: '2+3=')을 가져와 그 결과를 더하고 return을 통해 모든 것을 반환합니다:

let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) { let sum = Number(match1) + Number(match2); return match0 + sum; }); console.log(result);

실습 문제

문자열이 주어졌습니다:

let str = 'aaa [2] bbb [3] ccc [12] ddd';

괄호 안에 있는 숫자를 찾아 두 배로 늘리세요. 즉, 우리의 문자열은 다음과 같이 되어야 합니다:

'aaa [4] bbb [6] ccc [24] ddd'

문자열이 주어졌습니다:

let str = '123 456 789';

모든 숫자를 찾아 숫자 순서를 역순으로 바꾸세요. 즉, 우리의 문자열은 다음과 같이 되어야 합니다:

'321 654 987'

날짜가 있는 문자열이 주어졌습니다:

let str = '31.12.2025 30.11.2024 29.10.2023';

모든 날짜를 찾아 다른 형식으로 변환하여 다음 문자열을 얻으세요:

'2025-12-31 2024-11-30 2023-10-29'
한국어
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
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부