Javascript switch문에서 정규표현식 사용하기(feat. google tag manager)

스크린샷 2016-01-11 오후 5.23.49

Problem

Google Tag Manager에서 event를 만드는데 카테고리를 현재 있는 페이지 이름으로 넣고 싶다.
하지만 그냥 page path를 가져오면 가독성이 좋지 않아 한글화를 하고 싶다.
커스텀 자바스크립트 변수로 switch로 분기태워서 나누면 될 것 같은데,
https://store.pinkfong.com/user/order/2521/에서 2521처럼 동적으로 만들어진 path가 있어 보통 switch문으로 되지 않아 정규표현식을 쓰도록 한다.

Solution

switch에 true를 넣어 무조건 안으로 넣어주고, /정규식/.test(원하는변수)식으로 분기를 태워준다.
GTM의 Custom Javascript타입으로 pathName이란 이름의 Variables를 만들고, 사용할 땐 {{ pathName }}으로 사용해주면 된다.

function() {
    var path = location.pathname;
    var name;
    switch(true) {
        case /^\/$/.test(path):
            name = "메인페이지";
            break;
        case /^\/\d+\/$/.test(path):
            name = "제품상세";
            break;
        case /^\/user\/order\/\d+\/done\/$/.test(path):
            name = "구매완료";
            break;
        case /^\/user\/order\/$/.test(path):
            name = "주문";
            break;
        case /^\/user\/order\/\d+\/$/.test(path):
            name = "주문상세";
            break;
        case /^\/cart\/$/.test(path):
            name = "장바구니";
            break;
        case /^\/order\/$/.test(path):
            name = "주문진행중";
            break;
        default:
            name = path;
    }
    return name;
}

refer

http://stackoverflow.com/questions/2896626/switch-statement-for-string-matching-in-javascript

Published by

Yurim Jin

아름다운 웹과 디자인, 장고와 리액트, 그리고 음악과 맥주를 사랑하는 망고장스터

3 thoughts on “Javascript switch문에서 정규표현식 사용하기(feat. google tag manager)”

  1. 속도는 잘 모르겠습니다만 예전에 비슷한 상황이 있었는데 switch문의 break이 마음에 들지 않아서 for in 을 사용했었습니다.

    var path = location.pathname;
    var name=path;
    for (k in q={“메인페이지”:/^\/$/, “제품상세”:/^\/\d+\/$/}) {
    name = q[k].test(path) && k || name;
    }

    Meteor js guide-line에 따라 &&, ||를 사용하긴 했는데 break이 필요하시다면

    var path = location.pathname;
    var name=path;
    for (k in q={“메인페이지”:/^\/$/, “제품상세”:/^\/\d+\/$/}) {
    if (q[k].test(path)) {
    name = k;
    break;
    }
    }

    이렇게 쓸 수 있겠네요.
    하드코드로 하지 않고 정규식 규칙을 만들고 관리해야해서 이렇게 하긴 했는데 참고가 되셨으면 좋겠네요.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s