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

Generate string based on regex with parameters

本文关键字:字符串 正则表达式 于带 参数      更新时间:2023-11-23

我正在用JavaScript编写一个基本的url生成器。我有一个包含regex路由的路由表。目标是根据给定的正则表达式模式和参数生成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

附加:我需要/可以命名表达式中的参数吗?

在这种情况下不应该使用regex。最好使用Array.prototype.splice()自定义parameters,然后加入数组以检索期望的URL。

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

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

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>

我想这个能胜任你的工作。首先验证这两个参数,然后构造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方法中找到了最接近我的问题的解决方案:

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

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

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