Switch statement for string matching in JavaScript

前端 未结 9 1513
深忆病人
深忆病人 2020-11-29 15:46

How do I write a swtich for the following conditional?

If the url contains \"foo\", then settings.base_url is \"bar\".

The following is achi

9条回答
  •  余生分开走
    2020-11-29 16:40

    Self-contained version that increases job security:

    switch((s.match(r)||[null])[0])
    

    function identifyCountry(hostname,only_gov=false){
        const exceptionRe = /^(?:uk|ac|eu)$/ ; //https://en.wikipedia.org/wiki/Country_code_top-level_domain#ASCII_ccTLDs_not_in_ISO_3166-1
        const h = hostname.split('.');
        const len = h.length;
        const tld = h[len-1];
        const sld = len >= 2 ? h[len-2] : null;
    
        if( tld.length == 2 ) {
            if( only_gov && sld != 'gov' ) return null;
            switch(  ( tld.match(exceptionRe) || [null] )[0]  ) {
             case 'uk':
                //Britain owns+uses this one
                return 'gb';
             case 'ac':
                //Ascension Island is part of the British Overseas territory
                //"Saint Helena, Ascension and Tristan da Cunha"
                return 'sh';
             case null:
                //2-letter TLD *not* in the exception list;
                //it's a valid ccTLD corresponding to its country
                return tld;
             default:
                //2-letter TLD *in* the exception list (e.g.: .eu);
                //it's not a valid ccTLD and we don't know the country
                return null;
            }
        } else if( tld == 'gov' ) {
            //AMERICAAA
            return 'us';
        } else {
            return null;
        }
    }

    Click the following domains:

    • example.com
    • example.co.uk
    • example.eu
    • example.ca
    • example.ac
    • example.gov

    Honestly, though, you could just do something like

    function switchableMatch(s,r){
        //returns the FIRST match of r on s; otherwise, null
        const m = s.match(r);
        if(m) return m[0];
        else return null;
    }
    

    and then later switch(switchableMatch(s,r)){…}

提交回复
热议问题