根据环境拆分网址

时间:2016-08-11 04:06:17

标签: javascript angularjs regex

根据连字符分隔的环境,我有以下网址。

  1. www-dev.someurl.com for dev environment
  2. www-qa.someurl.com for qa environment
  3. www.someurl.com生产,无环境前缀
  4. 在我的代码片段中,我想动态构建上面的url 通过从url读取(使用$ location.host()或window.location.hostname)基于环境

    任何人都可以建议使用正则表达式或一些代码来查明Url中是否存在环境变量(dev / qa)

    if(contains dev/qa){
        //build url
        } else {
            //build production url
     }
    

    请使用正则表达式/代码段

    建议最佳选项

5 个答案:

答案 0 :(得分:1)

根据你之前的评论'而不是在正则表达式中传递qa / dev是否有任何方法我可以在连字符后得到值',这怎么样而不是正则表达式:

404

答案 1 :(得分:0)

使用正则表达式/www\.(?=(dev|qa))/

这个表达意味着;

  1. www.值开始匹配
  2. (?=展望未来,看看devqa这个词是否存在
  3. 如果确实如此,则会抓取(dev|da)devda值。
  4. 该词可以通过匹配器的第一个索引访问。

    示例:

    var urls = [
      "www.qa.someurl.com",
      "www.dev.someurl.com",
      "www.someurl.com"
    ];
    
    urls.forEach(url=> {
      var qaDevEnv = /www\.(?=(dev|qa))/.exec(url);
      if (qaDevEnv) {
        //build production url
        console.log("URL: ( " + url + " ) is " + qaDevEnv[1] + " environment.");
      } else {
        //build url
        console.log("URL: ( " + url + " ) is a production environment.");
      }
    });

答案 2 :(得分:0)

您可以构建此正则表达式:

var regex = /www-(qa|dev)/;
if(regex.test(domain){ ... }

答案 3 :(得分:0)

由于问题指定www-dev而非www.dev。 我们也不需要使用更复杂的前瞻。

if( /www-(dev|qa)\./.exec( url ) ) {
  // build url
} else {
  // build production url
}

这也将返回匹配的值。

/www-(dev|qa)\./.exec( "www-dev.someurl.com" )
["www-dev.", "dev"]

/www-(dev|qa)\./.exec( "www-qa.someurl.com" )
["www-qa.", "qa"]

/www-(dev|qa)\./.exec( "www.someurl.com" )
null

尝试一下: https://regex101.com/r/zH7vB0/1

答案 4 :(得分:0)

这样的事情怎么样?

我不关心我手动提供什么样的构建。一切都将自动化。

function getDeploymentType(str) {
    var matches = str.match(/(?:-)([^\.]*)/);
    return matches? matches[1]: "prod";
}


build(getDeploymentType(window.location.hostname)); // can return "dev", "qa" or "prod"

在构建函数中,代码可能如下所示:

function build(deployType) {
    var deploys = {
        "dev" : {},
        "qa"  : {},
        "prod": {}
    }

    runDeploy(deploys[deployType]);
}