identifiers-doi
Version:
Extract, validate and normalize DOIs (and ISBN-As).
34 lines (26 loc) • 763 B
JavaScript
;
var PATTERN = "\\b10\\.(?:97[89]\\.\\d{2,8}\\/\\d{1,7}|\\d{4,9}\\/\\S+)";
var GLOBAL_PATTERN = new RegExp(PATTERN, "g");
var SINGLE_PATTERN = new RegExp(PATTERN);
var VALID_ENDING = /(?:\w|\(.+\)|2-#)$/;
function extract(str) {
var matches = String(str).toLowerCase().match(GLOBAL_PATTERN);
if (!matches) {
return [];
}
return matches.map(stripPunctuation).filter(Boolean);
}
function extractOne(str) {
var match = String(str).toLowerCase().match(SINGLE_PATTERN);
if (!match) {
return;
}
return stripPunctuation(match[0]);
}
function stripPunctuation(doi) {
if (VALID_ENDING.test(doi)) {
return doi;
}
return extractOne(doi.replace(/\W$/, ""));
}
exports.extract = extract;