Parsing a Link header in Javascript
Basically, let’s say you have a bunch of Link headers in your response:
Link: <http://example.org/.meta>; rel=meta, <http://example.org/.acl>; rel=acl
All you need to do now is to pass them to the parser like this:
var r = parseLinkHeader(xhr.getResponseHeader('Link'));
Then, based on the rel type you are interested in, you just get the href value:
r['acl']['href'] -- outputs http://example.org/.acl
Gist source here
// Unquote string (utility)
function unquote(value) {
if (value.charAt(0) == '"' && value.charAt(value.length - 1) == '"') return value.substring(1, value.length - 1);
return value;
}
// Parse a Link header
function parseLinkHeader(header) {
var linkexp = /<[^>]*>\s*(\s*;\s*[^\(\)<>@,;:"\/\[\]\?={} \t]+=(([^\(\)<>@,;:"\/\[\]\?={} \t]+)|("[^"]*")))*(,|$)/g;
var paramexp = /[^\(\)<>@,;:"\/\[\]\?={} \t]+=(([^\(\)<>@,;:"\/\[\]\?={} \t]+)|("[^"]*"))/g;
var matches = header.match(linkexp);
var rels = 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;
}
}
return rels;
}
Written by Andrei Sambra
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Javascript
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#