정규식을 이용한 앞(뒷)자리 n글자를 제외한 숫자 *로 바꾸기 - 긍정적 전방(후방)탐색

송한솔·2023년 5월 10일
0

자바스크립트

목록 보기
7/10
var num = "010123498765";
var answer1 = num.replace(/\d(?=\d{4})/g, "*"); 
var answer2 = num.replace(/(?<=\d{4})\d/g, "*"); 
console.log(answer1); // ********8765
console.log(answer2); // 0101********

여기서

  1. /d는 모든 숫자를 찾는다는 뜻입니다.

  2. ?=는 긍정적 전방 탐색으로 숫자 뒤에 {4}(4개의 연속된 숫자)라는 조건을 찾습니다.
    이때 마지막 4개의 숫자를 지칭하는 이유는
    이 전의 숫자들이 선택된다면 4개의 연속된 숫자가 아닌 5개 이상의 연속된 수를 선택하는 것이기 때문에 원하는대로 선택이 되는것입니다.

  3. ?<=는 긍정적 후방 탐색이라고 합니다.


저같은 경우,이 코드를 보면 생기는 궁금증이 있었는데

var num = "010123498765";

var answer1 = num.replace(/\d(?=\d{4})/g, "*"); ********8765
var answer3 = num.replace(/\d(?<=\d{4})/g, "*"); // 010********

이렇게 뒤집기만 하면 긍정적 후방탐색으로 변경이 될것같은데,
막상 실행시켜보면 4자리가 아닌 3자리만 변경되는 것을 볼 수 있습니다.

다시 처음으로 돌아가 /d 의 위치를 확인해보면

var num = "010123498765";
var answer1 = num.replace(/\d(?=\d{4})/g, "*"); 
var answer2 = num.replace(/(?<=\d{4})\d/g, "*"); 
console.log(answer1); // ********8765
console.log(answer2); // 0101********

answer1은 /d가 앞에 적힌걸 확인할 수 있듯이
앞에서 부터 찾기 시작해서 마지막 4개를 제외한 숫자들을 '*'로 변경시킵니다

answer2는 /d가 뒤에 적힌것을 확인할 수 있습니다.
따라서 4자리의 숫자 4개를 먼저 확인한후의, 나머지를 확인합니다.

여기서 ?<=과 ?=는 진행방향의 차이이고, 기준은 /d의 위치로 볼 수 있을 것 같습니다.

/d(?=\d{4}) // 뒤에서 숫자 4개가 연속되는 부분을 체크,
(?<=\d{4})/d // 앞에서 숫자 4개가 연속되는 부분을 체크

0개의 댓글