Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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替换为$1作为变量_Javascript_Regex - Fatal编程技术网

Javascript替换为$1作为变量

Javascript替换为$1作为变量,javascript,regex,Javascript,Regex,我有以下情况: 某个字符串包含一些变量,例如: var string = '/page/{id}/{title}'; 现在,我希望能够用以下数组中的变量替换{id}和{title}: var arr = {'id':10, 'title':'test-page'}; 我想出了一个小小的正则表达式: string.replace ( /{([a-zA-Z0-9]+)}/g , '$1' ); 正如预期的那样,它只返回以下内容: /page/id/title 所以我试了一下: string.

我有以下情况: 某个字符串包含一些变量,例如:

var string = '/page/{id}/{title}';
现在,我希望能够用以下数组中的变量替换{id}和{title}:

var arr = {'id':10, 'title':'test-page'};
我想出了一个小小的正则表达式:

string.replace ( /{([a-zA-Z0-9]+)}/g , '$1' );
正如预期的那样,它只返回以下内容:

/page/id/title
所以我试了一下:

string.replace ( /{([a-zA-Z0-9]+)}/g , arr [ '$1' ] );
但这也带来了一个问题

/page/undefined/undefined
现在,我知道这样的事情可能会有一个循环等,但它会很好地有一个线性为这一点。我不太习惯JS,所以我希望有一些我不知道的功能或选项可以帮助我解决这个问题:)


致以最良好的祝愿

试试这样的方法:

var arr = {'id':10, 'title':'test-page'};

'/page/{id}/{title}'.replace(/\{([\w\d]+?)\}/g, function(a, b) {
    return arr[b] || '';
});
'/page/{id}/{title}'.template(arr);
如果您经常使用这个replace,我会创建一个
String
helper原型方法。例如:

String.prototype.template = function(data) {
    return this.replace(/\{([\w\d]+?)\}/g, function(a, b) {
        return data[b] || '';
    });
};
然后像这样使用它:

var arr = {'id':10, 'title':'test-page'};

'/page/{id}/{title}'.replace(/\{([\w\d]+?)\}/g, function(a, b) {
    return arr[b] || '';
});
'/page/{id}/{title}'.template(arr);
根据,

因为我们想更进一步 在完成最终替换之前转换匹配结果 我们必须使用一个函数。这将强制对比赛进行评估 在
toLowerCase()
方法之前。如果我们尝试使用 没有函数的匹配,
toLowerCase()
将无效

(在上面的文本中,将
toLowerCase()
替换为“访问对象中的属性”)

然后,你可以使用

function replacer(match, p1, p2, p3/*, ...*/, offset, string){
    return arr[p1];
}
var arr = {'id':10, 'title':'test-page'};
'/page/{id}/{title}'.replace(/\{([\w\d]+?)\}/g, replacer);

非常感谢先生,现在我可以回去工作了:)!您的编辑确实是一个更好的解决方案。您可能希望处理传入对象中不存在
{tag}
的情况,这比现在要优雅一点。@jfriend00例如。根据我的口味,如果
{tag}
不存在,最好将其完全剥离。有棱角的就可以了,手杖。@dfsq-剥皮就可以了。如果标记不在对象中,您现在所做的就是插入“undefined”。哦,您是指第一个示例!是的,你是对的,我在看原型代码。非常感谢。