Javascript 基于带参数的正则表达式生成字符串
我正在用JavaScript编写一个基本的url生成器。我有一个包含正则表达式路由的路由表。目标是基于给定的正则表达式模式和参数生成url 例如,我得到了以下模式: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/此处的某个常量字符串/测试内容 额外好处:我是否需要/可
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正则表达式中间出现常数字符串?