最初の文字列からキーの配列を抽出し、後者から値の配列を抽出する必要があります。値の前に特定のパターンがあり、その後に特定のパターンがあります。
これを行う既存のライブラリはありませんが、実装を作成しました。ここでライブデモンストレーションを見つけることができます。
//## Extension to escape all regex special characters in a string ##
RegExp.quote = function(str) {
return (str + '').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
};
//## Parsing ##
var parser = PathParser('/{first}/{last}');
var actual = parser('/fred/flintstone');
//## Output ##
var pre = document.createElement('pre');
pre.innerHTML = JSON.stringify(actual, null, " ");
document.body.appendChild(pre);
//## The parser constructor ##
function PathParser(pattern) {
var keys = [];
var keyreg = /\{([a-zA-Z0-9]+)\}/g;
var result;
while ((result = keyreg.exec(pattern)) !== null) {
var pre = "^" + RegExp.quote(pattern.substring(0, result.index)).replace(/\\\{[a-zA-Z0-9]+\\\}/g, ".*");
var post = RegExp.quote(pattern.substring(keyreg.lastIndex)).replace(/\\\{[a-zA-Z0-9]+\\\}/g, ".*") + "$";
keys.push({
pre: pre,
post: post,
text: result[1]
});
}
function parser(valstring) {
var keyarr = keys;
var obj = {};
for (var i = 0; i < keyarr.length; i++) {
var valreg = new RegExp(keyarr[i].pre + "(.*)" + keyarr[i].post);
obj[keyarr[i].text] = valstring.match(valreg)[1];
}
return obj;
}
return parser;
}