假设我有一个字符串,例如:
var map = "/directory/:id/thumbnails/:size";
我想用它来映射另一个字符串(本质上,与 Rails 用来定义路由的东西相同),例如:
var str = "/directory/10/thumbnails/large";
我想“比较”这两个字符串,并返回一个键值对或 JSON 对象,表示映射到 map
的 str
部分,它在我上面的例子中,看起来像:
obj = {
'id' : '10',
'size' : 'large'
}
这是否适合 JavaScript 正则表达式?谁能帮帮我?
最佳答案
我发现写代码比解释更容易:)
var map = "/directory/:id/thumbnails/:size";
var str = "/directory/10/thumbnails/large";
var obj = {};
var mapArr = map.split('/');
var strArr = str.split('/');
if (mapArr.length != strArr.length) return false;
for (var i = 0; i < mapArr.length; i++)
{
var m = mapArr[i];
var s = strArr[i];
if (m.indexOf(":") != 0) continue;
m = m.substring(1);
obj[m] = s;
document.write(m + " = ");
document.write(obj[m]);
document.write("<br/>");
}
您还可以在此处查看实际效果 => http://jsfiddle.net/5qFkb/
如果您有任何问题,请务必询问,但代码应该是不言自明的。另请注意,没有通常的空值检查和我通常会放入的东西 - 这只是一个快速而肮脏的概念证明。
哦,万一我的回答不清楚;不,我不会使用正则表达式,因为那样我会遇到两个问题而不是一个。
关于javascript - 从javascript中的参数化字符串中解析值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4847631/