UNPKG

@zettlr/citr

Version:

A small library to parse Markdown Citeproc notation as CSL JSON

62 lines (56 loc) 2.23 kB
/*! * BEGIN HEADER * * Contains: Regular expressions for various tasks. * Maintainer: Hendrik Erz * License: GNU GPL v3 * * Description: Citr needs to extract a lot of different functionality, so we * need many different regular expressions. In this file, we * collect them all to make it easy to maintain them. * * END HEADER */ /** * This regular expression also matches full citations as above, but * only expects the citation itself within the string. It contains one * capturing group that includes the full citation without the square * brackets. * * Full match: A full citation with square brackets * Group 1: The full citation without the square brackets */ export const fullCitationValidatorRE = /^\[([^[\]]*@[^[\]]+)\]$/ /** * This regular expression is a combination of the RegExp above and the * loose citekeyValidatorRE below, enabling us to capture both full citations * and loose citations in text. * * Full match: Either a full citation with square brackets, or a single citekey * Group 1: Full citation with square brackets * Group 2: Full citation without square brackets * Group 3: Single citekey (2nd alternative) */ export const citationExtractionRE = /(\[([^[\]]*@[^[\]]+)\])|(@[\p{L}\d_][\p{L}\d_:.#$%&\-+?<>~\/]*)/gu /** * This regular expression matches citekeys with strict restrictions on what * is allowed, and what not (such as: may contain only ASCII characters). * * Full match: A single citekey (strict mode) * Group 1: A single citekey, but guaranteed without the optional @ in front. */ export const strictCitekeyValidatorRE = /^@?([a-zA-Z0-9_][a-zA-Z0-9_:.#$%&\-+?<>~/]*)$/ /** * This regular expression matches citekeys as loosely as possible to match * what pandoc-citeproc would try to pass as a valid citation key. * * Full match: A single citekey (loose mode) * Group 1: A single citekey, but guaranteed without the optional @ in front. */ export const looseCitekeyValidatorRE = /^@?([\p{L}\d_][\p{L}\d_:.#$%&\-+?<>~\/]*)$/u /** * The locator regular expression matches locator mappings * * Full match: A full locator range (digits only, optionally divided by a '-') */ export const locatorRE = /\d+(?:-\d+)?/g