한 텍스트 구문에서 중첩되는 문자열을 제거하는 함수입니다.
예를 들어 “사과;;;바나나;;파인애플;배;;;포도;” 라는 문자열이 있을때 중복된 세미콜론을 제거하고 하나의 세미콜론만 가지게 하고 싶습니다. 즉, “사과;바나나;파인애플;배;포도;” 로 변환하고자 합니다.
이 때 흔히 아래와 같이 replace를 이용해 치환합니다.
var fruits = "사과;;;바나나;;파인애플;배;;;포도;"; fruits = fruits.replace(/;;/g, ";");
하지만 결과는 “사과;;바나나;파인애플;배;;포도;” 가 될 것입니다. replace가 한 번 더 실행되어야 원하는 결과를 얻을 수 있습니다. 중첩문자(세미콜론)이 3개 있을땐 2번, 4개 있을땐 3번 replace가 실행되어야 하는데 이 말의 의미는 반목문(loop)를 실행해야 한다는 것입니다.
중첩문자를 제거하기 위한 함수를 아래와 같이 만들어 봤습니다.
// 중첩 문자 제거 function rm_str_nesting(target_id, target_str, replace_str) { try { // 대소문자를 구분하지 않으려면 정규식 옵션에 g 대신 gi로 사용 var exp = new RegExp(target_str, "g"); var id = $("#" + target_id); do { id.val(id.val().replace(exp, replace_str)); } while (id.val().indexOf(target_str) > -1); } catch (error) { return false; } return true; }
이 함수의 사용 예는 다음과 같습니다.
<input type="text" id="fruits" value="사과;;;바나나;;파인애플;배;;;포도;" /> <script type="text/javascript"> // rm_str_nesting([문자열이 있는 대상 input 박스의 ID], [대상 중첩 문자열], [치환할 문자열]) rm_str_nesting(fruits, ";;", ";"); </script>
* 참고로 함수 내용안에 jQuery 셀렉터가 사용되고 있기 때문에 jQuery 라이브러리가 필요합니다.