문제 상황
음수나 숫자 범위가 포함된 하이픈(-)으로 구분된 문자열이 있다고 가정해 보겠습니다.
var firstValue = "John-Smith-90-100-US"; var secondValue = "David-Miller--120-AUS";
이 문자열을 단순히 하이픈 기준으로 나누면 90-100 같은 숫자 범위나 -120 같은 음수까지 잘못 분리되는 문제가 발생합니다. 이를 해결하려면 정규 표현식(regular expression)을 활용해야 합니다.
정규 표현식 패턴 설명
여기서 사용하는 정규 표현식은 /-(?=[A-Za-z-]|\d+-\d)/ 입니다. 각 요소의 의미는 다음과 같습니다.
-: 하이픈 문자 자체와 일치합니다.(?=...): 전방 탐색(lookahead)으로, 실제로 문자를 소비하지 않고 뒤에 오는 패턴만 확인합니다.[A-Za-z-]: 하이픈 뒤에 알파벳 또는 하이픈이 오는 경우를 의미합니다. 이름 구분자나 음수 처리에 사용됩니다.\d+-\d: 하이픈 뒤에 '숫자-숫자' 형태가 이어지는 경우로, 숫자 범위를 하나의 값으로 유지합니다.
예제 코드
다음은 전체 코드입니다.
var firstValue = "John-Smith-90-100-US"; var secondValue = "David-Miller--120-AUS"; var regularExpression = /-(?=[A-Za-z-]|\d+-\d)/; var result1 = firstValue.split(regularExpression); var result2 = secondValue.split(regularExpression); console.log(result1); console.log(result2);
프로그램 실행 방법
위 프로그램을 실행하려면 Node.js 환경에서 다음 명령어를 입력합니다. 여기서는 파일 이름이 demo241.js라고 가정합니다.
node fileName.js
출력 결과
실행 결과는 다음과 같습니다.
PS C:\Users\Amit\javascript-code> node demo241.js [ 'John', 'Smith', '90-100', 'US' ] [ 'David', 'Miller', '-120', 'AUS' ]
출력 결과를 보면 첫 번째 문자열에서는 '90-100'이 하나의 요소로 그대로 유지되었고, 두 번째 문자열에서는 '-120'이 음수로 온전하게 보존된 것을 확인할 수 있습니다. 이처럼 전방 탐색을 활용한 정규 표현식을 사용하면 일반적인 구분자와 특수한 숫자 형식을 동시에 처리할 수 있습니다.