문자열 "abcdef 30"과 같이 텍스트와 숫자가 섞여 있을 때 숫자만 추출하려면 정규식(Regular Expression)을 활용해야 합니다. 단순히 parseInt()만 사용하면 문자열이 숫자로 시작하지 않는 경우 NaN(Not a Number)을 반환하게 됩니다.
정규식과 match(), parseInt() 조합
해결 방법은 간단합니다. String 객체의 match() 메서드에 정규식 /\d+/을 적용하여 문자열 내의 숫자 부분을 먼저 찾아낸 뒤, 그 결과를 parseInt()로 감싸면 원하는 정수 값을 얻을 수 있습니다.
예제 코드
<!DOCTYPE html> <html> <body> <script> var myStr = "abcdef 30"; var num = parseInt(myStr.match(/\d+/)) alert(num); </script> </body> </html>
코드 설명
/\d+/는 하나 이상의 연속된 숫자(digit)와 일치하는 정규식 패턴입니다. match() 메서드는 이 패턴과 일치하는 첫 번째 결과를 배열 형태로 반환하며, parseInt()는 해당 결과를 정수형 숫자 30으로 변환합니다.
추가 팁: parseFloat() 활용하기
소수점이 포함된 숫자를 추출해야 하는 경우에는 parseInt() 대신 parseFloat()을 사용하면 됩니다.
var myStr = "price 19.99 dollars"; var num = parseFloat(myStr.match(/\d+(\.\d+)?/)); console.log(num); // 19.99
또한 여러 개의 숫자가 포함된 문자열이라면 전역 플래그(g)를 추가한 /\d+/g 패턴과 match()를 조합하면 모든 숫자를 배열로 한 번에 가져올 수 있습니다.