Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于带参数的正则表达式生成字符串_Javascript_Regex - Fatal编程技术网

Javascript 基于带参数的正则表达式生成字符串

Javascript 基于带参数的正则表达式生成字符串,javascript,regex,Javascript,Regex,我正在用JavaScript编写一个基本的url生成器。我有一个包含正则表达式路由的路由表。目标是基于给定的正则表达式模式和参数生成url 例如,我得到了以下模式: var route = /\/([0-9]{4})\/some-constant-string-here\/([a-z-]+)/i 使用以下参数: var parameters = [1234, "test-stuff"]; 如何将参数应用于模式以获得以下内容:/1234/此处的某个常量字符串/测试内容 额外好处:我是否需要/可

我正在用JavaScript编写一个基本的url生成器。我有一个包含正则表达式路由的路由表。目标是基于给定的正则表达式模式和参数生成url

例如,我得到了以下模式:

var route = /\/([0-9]{4})\/some-constant-string-here\/([a-z-]+)/i
使用以下参数:

var parameters = [1234, "test-stuff"];
如何将参数应用于模式以获得以下内容:
/1234/此处的某个常量字符串/测试内容


额外好处:我是否需要/可以在表达式中命名参数以便命名参数?

在这种情况下不应该使用正则表达式。最好使用自定义
参数
,然后加入数组以检索所需的URL

var-params=[1234,“测试材料”];
参数拼接(1,0,'此处的某个常量字符串');
var url='/'+params.join('/');

警报(url)在这种情况下不应该使用正则表达式。最好使用自定义
参数
,然后加入数组以检索所需的URL

var-params=[1234,“测试材料”];
参数拼接(1,0,'此处的某个常量字符串');
var url='/'+params.join('/');
警报(url)当您谈到命名参数时,可以通过创建函数来实现这一点:

function makUrl(obj) {
    return '/'+obj.base+'/some-constant-string-here/'+obj.target;
}

var route = makUrl({base:'1234',target:'test-stuff'});
或者,您可能想要创建一个特定的对象:

var route=function(){
这个.Base='0000';
this.base=函数(val){
如果(typeof(val)!='undefined')this.Base=val;
把这个还给我。基地;
}
目标=未定义;
this.target=函数(val){
如果(typeof(val)!='undefined')这个.Target=val;
返回此。目标;
};
this.url=function(){
if((typeof(this.Base)!=“未定义”)&&
(typeof(this.Target)!=“未定义”)
返回“/”+this.Base+”/此处的某个常量字符串/“+this.Target;
};
}
函数println(val){sample.innerHTML+=val+“
”;} var rt01=新路线; println(rt01.base()); println(rt01.target()); println(rt01.url()); rt01.基底(1234); rt01.目标(“测试材料”); println(“…”); println(rt01.base()); println(rt01.target()); println(rt01.url())
#示例{font-family:mono;}
在谈到命名参数时,您可以通过创建函数来实现这一点:

function makUrl(obj) {
    return '/'+obj.base+'/some-constant-string-here/'+obj.target;
}

var route = makUrl({base:'1234',target:'test-stuff'});
或者,您可能想要创建一个特定的对象:

var route=function(){
这个.Base='0000';
this.base=函数(val){
如果(typeof(val)!='undefined')this.Base=val;
把这个还给我。基地;
}
目标=未定义;
this.target=函数(val){
如果(typeof(val)!='undefined')这个.Target=val;
返回此。目标;
};
this.url=function(){
if((typeof(this.Base)!=“未定义”)&&
(typeof(this.Target)!=“未定义”)
返回“/”+this.Base+”/此处的某个常量字符串/“+this.Target;
};
}
函数println(val){sample.innerHTML+=val+“
”;} var rt01=新路线; println(rt01.base()); println(rt01.target()); println(rt01.url()); rt01.基底(1234); rt01.目标(“测试材料”); println(“…”); println(rt01.base()); println(rt01.target()); println(rt01.url())
#示例{font-family:mono;}

我想这件适合你的工作。首先验证这两个参数,然后构造url

var parameters = [1234, "test-stuff"],
          text = "some-constant-string-here",
           url = "";

/\d{4}/.test(parameters[0])   &&
/[a-z-]+/.test(parameters[1]) &&
(url = "/" + parameters[0] + "/" + text + "/" + parameters[1]);

我想这是你的工作。首先验证这两个参数,然后构造url

var parameters = [1234, "test-stuff"],
          text = "some-constant-string-here",
           url = "";

/\d{4}/.test(parameters[0])   &&
/[a-z-]+/.test(parameters[1]) &&
(url = "/" + parameters[0] + "/" + text + "/" + parameters[1]);

谢谢大家的回答。我在以下
generate
方法中找到了最接近我问题的解决方案:

它使用regexp库的路径从路由中提取regexp:

  • regexp可用于验证路径
  • generate
    方法中的
    requiredRouteParams
    包含从路由建立路径所需的数据

    • 谢谢大家的回答。我在以下
      generate
      方法中找到了最接近我问题的解决方案:

      它使用regexp库的路径从路由中提取regexp:

      • regexp可用于验证路径
      • generate
        方法中的
        requiredRouteParams
        包含从路由建立路径所需的数据

      有什么问题吗?
      '/'+[1234,“测试材料”]。join('/')
      ?为什么使用正则表达式而不是
      '/'+参数。join('/')
      ?编辑了示例路由。ReGEX后面的另一个原因是路由模式也用于验证。请回答以前的注释:为什么不<代码> > / + [ [ 1234 ],“测试素材”]连接(“/一些常数字符串在这里/”)<代码>可以在任何地方或总是出现在2正则表达式的中间吗?<代码> > / + + [ 1234,“测试材料”]有什么错。
?为什么使用regex而不是
“/”+参数。join(“/”)
?编辑了示例路由。ReGEX后面的另一个原因是路由模式也用于验证。请回答先前的注释:为什么不<代码> > / + [[ 1234 ],“测试素材”]连接(“/某些常量字符串在这里/”)<代码>是否可以在任何地方或总是在2正则表达式中间出现常数字符串?