정규 표현식(Regular Expression)을 사용하면 JavaScript에서 주어진 문자열의 단어 수를 손쉽게 계산할 수 있습니다. 문자열에 포함된 단어를 정확하게 세기 위해서는 몇 가지 전처리 과정을 거쳐야 하며, 이 글에서는 그 단계를 하나씩 살펴보겠습니다.
단어 수 계산 시 고려해야 할 사항
문장이나 문단은 여러 개의 단어가 공백으로 구분되어 이루어져 있습니다. 그런데 실제 문자열에서는 단어 사이에 공백이 하나만 있는 것이 아니라, 두 칸 이상의 연속된 공백이나 줄바꿈 앞뒤의 불필요한 공백도 존재할 수 있습니다. 따라서 정확한 단어 수를 구하려면 개발자는 이러한 모든 경우를 고려해야 합니다.
1단계: 문자열 앞뒤의 공백 제거
먼저 문자열 시작 부분과 끝 부분에 있는 공백을 제거합니다. 아래 정규 표현식은 문자열의 맨 앞과 맨 뒤에 위치한 공백을 삭제합니다.
str.replace(/(^\s*)|(\s*$)/gi, "");
2단계: 연속된 공백을 하나의 공백으로 변환
두 칸 이상 반복되는 공백을 하나의 공백으로 줄여줍니다.
str.replace(/[ ]{2}/gi, " ");3단계: 줄바꿈 앞의 공백 제거
새로운 줄(new line) 앞에 붙어 있는 공백을 제거합니다.
str.replace(/\n /, "\n");
위의 모든 단계를 수행하면 단어들이 하나의 공백으로만 구분된 깔끔한 문자열을 얻을 수 있습니다. 이후 split() 메서드를 사용해 문자열을 분할하면 각 단어가 배열 요소로 변환됩니다. 마지막으로 length 속성을 통해 배열의 길이, 즉 단어의 개수를 확인할 수 있습니다.
예제 코드
<html>
<body>
<script>
function countWords(str) {
str = str.replace(/(^\s*)|(\s*$)/gi,"");
str = str.replace(/[ ]{2}/gi," ");
str = str.replace(/\n /,"\n");
return str.split(' ').length;
}
document.write(countWords(" Tutorix is one of the best E-learning platforms"));
</script>
</body>
</html>실행 결과
8
위 예제에서 입력 문자열에는 앞뒤 공백과 중간에 두 칸짜리 공백이 포함되어 있지만, 전처리 과정을 거친 후 정확히 8개의 단어가 계산되는 것을 확인할 수 있습니다. 이처럼 정규 표현식과 split() 메서드를 조합하면 어떤 형태의 문자열이든 신뢰성 있게 단어 수를 구할 수 있습니다.