Javascript 基于环境的拆分url

Javascript 基于环境的拆分url,javascript,angularjs,regex,Javascript,Angularjs,Regex,我有以下基于环境的URL,用连字符分隔 www-dev.someurl.com for dev环境 www-qa.someurl.com用于qa环境 www.someurl.com用于生产,无环境前缀 在我的一段代码中,我想动态地构建上面的url 通过读取url(使用$location.host()或window.location.hostname)基于环境 有人能推荐一个正则表达式或一些代码来确定Url中是否有环境变量(dev/qa)吗 请建议使用regex/code snippet的最佳选项

我有以下基于环境的URL,用连字符分隔

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

    有人能推荐一个正则表达式或一些代码来确定Url中是否有环境变量(dev/qa)吗


    请建议使用regex/code snippet的最佳选项

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

    这个表达的意思是

  • www.
    值开始匹配
  • (?=
    向前看,看看单词
    dev
    qa
    是否存在
  • 如果它确实捕获了
    (dev | da)
    单词
    dev
    da
  • 该单词可以通过匹配器的第一个索引访问

    示例:

    var url=[
    “www.qa.someurl.com”,
    “www.dev.someurl.com”,
    “www.someurl.com”
    ];
    forEach(url=>{
    var qaDevEnv=/www\(?=(dev | qa))/.exec(url);
    如果(QADEV){
    //生成生产url
    log(“URL:(“+URL+”)是“+qaDevEnv[1]+”environment”);
    }否则{
    //构建url
    log(“URL:(“+URL+”)是一个生产环境。”);
    }
    
    });
    您可以构建此正则表达式:

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

    因为问题指定了
    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
    
    试一试:

    根据您之前的评论“在正则表达式中不传递qa/dev,有没有任何方法可以在连字符后获取值”,用这个代替正则表达式如何:

     if((window.location.hostname).indexOf('-')>=0){
         var env= (window.location.hostname).split('-')[1];
         // possible output of env : dev.someurl.com,qa.someurl.com
        }
        else{
        //prod
        }
    

    像这样的怎么样

    在这里,我不在乎手动生成什么样的版本。所有内容都将自动化

    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]);
    }
    

    与其在正则表达式中传递qa/dev,不如在连字符后有任何方式可以获取值,如果连字符后有某个值,则意味着存在某个环境,否则我可以将其视为生产环境,我必须从浏览器URL动态读取此内容,而不是在正则表达式中传递qa/dev,有没有任何方式可以在连字符后获取值,如果somevalue在连字符后面,这意味着存在一些环境,否则我可以将其视为产品,我必须从浏览器中动态读取url@user804401-我已更新我的解决方案以进行匹配并捕获QA或DEV值。如果仍然存在问题,请告诉我
    function build(deployType) {
        var deploys = {
            "dev" : {},
            "qa"  : {},
            "prod": {}
        }
    
        runDeploy(deploys[deployType]);
    }