Skip to main content

정규 표현식 예제

숫자를 콤마가 포함된 문자열로 치환

x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
console.log(numberWithCommas(1234567)); // "1,234,567"

논리

  • 단어 경계를 제외해서 선택한다.

  • 조건:LookForward를 통해서 적어도 1개 이상의 숫자 3개 셋트가 반복되어야 한다.

    • 위 조건에 조건을 하나 더 붙인다.
    • (Neg)LookForward를 통해서 3개 숫자 셋트 뒤에는 숫자 1~2개가 나오면 안된다.
  • \B: 단어 경계 반대 클래스

  • (\d{3})+: 세 자리 숫자 그룹을 하나 이상 찾습니다.

  • (?!\d): 바로 뒤에 숫자가 없는 위치를 찾습니다.

0.단어 경계도 선택할 수 있다. (조건자가 아니었네.??!)
Alt text

  • 위 경계표시된것을 보면 선택된 부분을 볼 수 있다.
  • 단어경계를 선택하면 문자열의 시작,끝 부분이 선택
  • 단어경계 반대 클래스를 선택하면 문자열 시작,끝을 제외한부분이 선택 된다.

1.긍정형 전방 탐색은 (?=...) 구문을 사용하여 표현

  • 정규식중에는 문자열을 소비하는 경우와 아닌경우가 있다.
  • 문자열을 소비하는 경우는 패턴과 일치하면 해당 문자열을 grab한다.
  • 그렇지 않은 경우라면, 조건에 맞는지만 체크한다.
  • 긍정형 전방 탐색은 조건같은것이다.
const str = "abc123xyz";
const regex = /\d(?=\D)/;
const result = str.match(regex); // 결과: ["3"]

2.부정형 전방 탐색(Negative Lookahead)

  • (?!) 구문을 사용하여 표현
  • 특정 패턴이 뒤따르지 않는 경우를 조건으로 내세울 수 있다.

숫자를 콤마가 포함된 문자열로 치환 2

function numberWithCommas(x) {
return x.toString().replace(/\d(?=(\d{3})+$)/g, '$&,');
}
// 예제
console.log(numberWithCommas(1234567890)); // "1,234,567,890"

숫자 Validator

양의 정수 Validator

function validateInput(input) {
// 빈 문자열인지 확인
if (input === "") {
return true;
}

// 양의 정수인지 확인
const positiveIntegerPattern = /^[1-9]\d*$/;
return positiveIntegerPattern.test(input);
}


// 테스트 예제
console.log(validateInput("")); // true (빈 문자열)
console.log(validateInput("123")); // true (양의 정수)
console.log(validateInput("0")); // false (0은 양의 정수가 아님)
console.log(validateInput("-123")); // false (음의 정수)
console.log(validateInput("abc")); // false (문자열)

---
const pattern = /^(?:|\d*[1-9]\d*)$/;

function validateInput(input) {
return pattern.test(input);
}

정수 Validator

function validateInput(input) {
// 빈 문자열인지 확인
if (input === "") {
return true;
}

// 0과 양의 정수, 음의 정수인지 확인
const integerPattern = /^-?\d+$/;
return integerPattern.test(input);
}

// 테스트 예제
console.log(validateInput("")); // true (빈 문자열)
console.log(validateInput("123")); // true (양의 정수)
console.log(validateInput("0")); // true (0)
console.log(validateInput("-123")); // true (음의 정수)
console.log(validateInput("abc")); // false (문자열)
console.log(validateInput("12.34")); // false (소수)

실수 Validator

function validateInput(input) {
// 빈 문자열인지 확인
if (input === "") {
return true;
}

// 0, 양의 정수, 음의 정수, 소수점을 포함한 실수 확인
const numberPattern = /^-?\d*\.?\d+$/;
return numberPattern.test(input);
}

// 테스트 예제
console.log(validateInput("")); // true (빈 문자열)
console.log(validateInput("123")); // true (양의 정수)
console.log(validateInput("0")); // true (0)
console.log(validateInput("-123")); // true (음의 정수)
console.log(validateInput("123.45")); // true (양의 실수)
console.log(validateInput("-123.45")) // true (음의 실수)
console.log(validateInput("abc")); // false (문자열)
console.log(validateInput("12.34.56")) // false (잘못된 형식)

next.js matcher

  • / 로 시작하는 모든 경로에 대해서
  • X(?!Y) Negative lookahead X if not followed by Y 조건을 건다.
  • 그 조건은 _next/static, .. robots.txt 등의 문자열이 따라오지 않는 경로이다.
  • 즉, 위 조건에 걸린다면 미들웨어는 작동하지 않는다.
export const config = {
matcher: [
/*
* BlackListing
* - _next/static (static files)
* - _next/image (image optimization files)
* - favicon.ico, sitemap.xml, robots.txt (metadata files)
*/
"/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)",
],
};