UNPKG

identifiers-doi

Version:

Extract, validate and normalize DOIs (and ISBN-As).

34 lines (26 loc) 763 B
"use strict"; 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;