반응형
7.5 함수를 이용해서 치환하기
정규표현식을 replace의 첫 번째 인자로 전달하면 단순히 고정된 문자열이 아니라 패턴에 일치하는 부분을 하나 치환한다.
replace()의 강력한 기능은 고정된 문자열 대신 함수를 치환할 값으로 제공할 수 있다는 점 이다.
두 번째 인자로 함수를 넘길 경우, 일치하는 부분을 찾을 때마다 다음과 같은 일련의 매개변수를 가지고 호출이 된다.
- 매치되는 전체 문자열
- 해당 매치 내에 포함된 캡처들(캡처는 배열이 아니라 각각 하나의 매개변수로 전달됨)
- 원본 문자열에서 매치되는 부분의 위치(index)
- 원본 문자열
예제) replace 사용
function upper(all, letter){return letter.toUpperCase();} // 대문자변환
console.log("border-bottom-width".replace(/-(\w)/g, upper) == "borderBottomWidth");
all 에는 매칭되는 전체 문자열(-b, -w)
letter에는 캡처된 문자열(b, w) 가 매개변수로 들어오게 된다.
예제) replace 사용2 (파라미터 압축하기)
foo=1&foo=2&blah=a&blah=b&foo=3 를
=> "foo=1,2,3&blah=a,b" 로 압축하기
function compress(source){
var keys = {};
source.replace(/([^=&]+)=([^&]*)/g, function(all, key, value){
keys[key] = (keys[key] ? keys[key] + "," : "") + value;
return "";
});
var result = [];
for(var key in keys){
result.push(key + "=" + keys[key]);
}
return result.join("&");
}
console.log(compress("foo=1&foo=2&blah=a&blah=b&foo=3"));
객체를 하나 선언하고 거기에 쿼리 문자열에서 찾은 키와 값을 저장한다.
그런 다음 원본 문자열의 replace() 메서드를 호출하고 이 메서드에 키와 값을 찾는데 이용할 정규 표현식을 전달해 키와 값을 찾아낸다.
all에는 전체문자열 (ex. foo=1)
key에는 캡처된 키(foo)
value에는 캡처된 값(1)
반응형
'프로그래밍 노트 > JAVASCRIPT' 카테고리의 다른 글
[Javascript] 배열 합치기 3가지 방법 (0) | 2020.12.22 |
---|---|
[Javascript] ES6 모듈화(import/export) 사용하기 (0) | 2020.12.09 |
[Javascript] 정규 표현식 매치된부분 캡처하기(정규식_4) (0) | 2019.01.23 |
[Javascript] 정규 표현식 컴파일하기(정규식_3) (0) | 2019.01.23 |
[Javascript] 정규 표현식 살펴보기(정규식_2) (0) | 2019.01.21 |