I wrote a Link header parser in Javascript. Thanks Mark Nottingham for sending me a link to his python equivalent.
var linkexp=/<[^>]*>\s*(\s*;\s*[^\(\)<>@,;:"\/\[\]\?={} \t]+=(([^\(\)<>@,;:"\/\[\]\?={} \t]+)|("[^"]*")))*(,|$)/g;
var paramexp=/[^\(\)<>@,;:"\/\[\]\?={} \t]+=(([^\(\)<>@,;:"\/\[\]\?={} \t]+)|("[^"]*"))/g;
function unquote(value)
{
if (value.charAt(0) == '"' && value.charAt(value.length - 1) == '"') return value.substring(1, value.length - 1);
return value;
}
function parseLinkHeader(value)
{
var matches = value.match(linkexp);
var rels = new Object();
var titles = new Object();
for (i = 0; i < matches.length; i++)
{
var split = matches[i].split('>');
var href = split[0].substring(1);
var ps = split[1];
var link = new Object();
link.href = href;
var s = ps.match(paramexp);
for (j = 0; j < s.length; j++)
{
var p = s[j];
var paramsplit = p.split('=');
var name = paramsplit[0];
link[name] = unquote(paramsplit[1]);
}
if (link.rel != undefined)
{
rels[link.rel] = link;
}
if (link.title != undefined)
{
titles[link.title] = link;
}
}
var linkheader = new Object();
linkheader.rels = rels;
linkheader.titles = titles;
return linkheader;
}
I had written a non-regular-expression, hand-coded parser in Java for RESTEasy. Thought it might be faster than regexp. That could probably be ported to Javascript too.

Leave a comment