使用参数生成基于正则表达式的字符串

时间:2016-04-01 14:15:53

标签: javascript regex

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

例如,我有以下模式:

var route = /\/([0-9]{4})\/some-constant-string-here\/([a-z-]+)/i

使用以下参数:

var parameters = [1234, "test-stuff"];

如何将参数应用于模式以获取此信息:/1234/some-constant-string-here/test-stuff

额外奖励:我是否需要/我可以在表达式中命名参数以获得命名参数吗?

4 个答案:

答案 0 :(得分:0)

在这种情况下你不应该使用正则表达式。最好使用Array.prototype.splice()自定义parameters,然后加入数组以检索预期的网址。



var params = [1234, "test-stuff"];
params.splice(1, 0, 'some-constant-string-here');
var url = '/' + params.join('/');
alert(url);




答案 1 :(得分:0)

当您谈到命名参数时,可以通过创建函数来实现:

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

var route = makUrl({base:'1234',target:'test-stuff'});

或许,您想要创建一个特定的对象:

var route = function() {
    this.Base = '0000';
    this.base=function(val) {
	if (typeof(val)!='undefined') this.Base=val;
	return this.Base;
    }
    this.Target= undefined;
    this.target=function(val) {
	if (typeof(val)!='undefined') this.Target=val;
	return this.Target;
    };
    this.url=function() {
	if ( (typeof(this.Base)!='undefined') &&
	     (typeof(this.Target)!='undefined')) 
	    return '/'+this.Base+'/some-constant-string-here/'+this.Target;
    };
}
function println(val) { sample.innerHTML+=val+"<br>"; }

var rt01 = new route;

println( rt01.base()   );
println( rt01.target() );
println( rt01.url()    );

rt01.base(1234);
rt01.target('test-stuff');
println("...");

println( rt01.base()   );
println( rt01.target() );
println( rt01.url()    );
#sample {font-family:mono;}
<div id="sample"> </div>

答案 2 :(得分:0)

我猜这个可以完成你的工作。首先验证两个参数然后构造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]);

答案 3 :(得分:0)

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

https://github.com/gnoesiboe/route-match/blob/master/lib/utility/pathGenerator.js

它使用path-to-regexp库从路由中提取regexp: https://github.com/pillarjs/path-to-regexp

  • 正则表达式可用于验证路径
  • requiredRouteParams方法中的generate包含从路径构建路径所需的数据
相关问题