JavaScript에서 복잡한 문자열을 다룰 때, 정규 표현식(Regular Expression)을 활용하면 특정 패턴의 문자열을 손쉽게 추출할 수 있습니다. 이번 글에서는 문자열 중 완전히 숫자로만 이루어지지 않은 값을 찾아내는 방법을 알아보겠습니다.
예제 문자열
다음과 같이 여러 형태의 값이 섞여 있는 복잡한 문자열이 있다고 가정해 보겠습니다.
var values = 'studentId:"100001",studentName:"John Smith",isTopper:true,uniqueId:10001J-10001,marks:78,newId:"4678"';
위 문자열에는 따옴표로 감싸진 값, 불리언 값, 숫자, 그리고 알파벳과 숫자가 혼합된 값(10001J-10001)이 함께 존재합니다. 우리의 목표는 이 중에서 숫자만으로 구성되지 않은 문자열, 즉 10001J-10001 같은 값을 찾아내는 것입니다.
정규 표현식을 사용한 해결 방법
다음 코드는 후방탐색(lookbehind)과 부정형 전방탐색(negative lookahead)을 조합하여 원하는 값을 추출합니다.
예제 코드
var regularExpression = /(?<=:)(?!(?:null|false|true|\d+),)[\w-]+(?=,)/g;
var values = 'studentId:"100001",studentName:"John Smith",isTopper:true,uniqueId:10001J-10001,marks:78,newId:"4678"';
console.log("원본 값=" + values);
console.log("숫자로만 이루어지지 않은 문자열=");
console.log(values.match(regularExpression));정규식 패턴 분석
(?<=:)— 콜론(:) 뒤에 오는 위치에서 매칭을 시작합니다(후방탐색).(?!(?:null|false|true|\d+),)— null, false, true 또는 숫자로만 이루어진 값은 제외합니다(부정형 전방탐색).[\w-]+— 영문자, 숫자, 밑줄(_), 하이픈(-)으로 구성된 하나 이상의 문자를 매칭합니다.(?=,)— 콤마(,) 앞에서 매칭을 종료합니다./g플래그 — 문자열 전체에서 일치하는 모든 항목을 찾습니다.
프로그램 실행 방법
Node.js 환경에서 위 프로그램을 실행하려면 다음 명령어를 사용합니다.
node fileName.js
예를 들어 파일 이름이 demo187.js라면 아래와 같이 실행합니다.
node demo187.js
실행 결과
위 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
PS C:\Users\Amit\javascript-code> node demo187.js 원본 값=studentId:"100001",studentName:"John Smith",isTopper:true,uniqueId:10001J-10001,marks:78,newId:"4678" 숫자로만 이루어지지 않은 문자열= [ '10001J-10001' ]
결과를 보면 studentId, marks, newId처럼 숫자로만 이루어진 값은 제외되고, 알파벳과 숫자가 혼합된 10001J-10001만 배열로 반환된 것을 확인할 수 있습니다.
마무리
이처럼 정규 표현식의 전방탐색과 후방탐색 기능을 적절히 조합하면, 복잡한 문자열에서도 원하는 조건의 값만 정확하게 필터링할 수 있습니다. 데이터 파싱이나 유효성 검사 작업에서 유용하게 활용해 보시기 바랍니다.