front-matter
Version:
Extract YAML front matter from a string
51 lines (41 loc) • 1.15 kB
JavaScript
var parser = require('js-yaml')
var optionalByteOrderMark = '\\ufeff?'
var pattern = '^('
+ optionalByteOrderMark
+ '(= yaml =|---)'
+ '$([\\s\\S]*?)'
+ '\\2'
+ '$'
+ (process.platform === 'win32' ? '\\r?' : '')
+ '(?:\\n)?)'
// NOTE: If this pattern uses the 'g' flag the `regex` variable definition will
// need to be moved down into the functions that use it.
var regex = new RegExp(pattern, 'm')
module.exports = extractor
module.exports.test = test
function extractor(string) {
string = string || ''
var lines = string.split(/(\r?\n)/)
if (lines[0] && /= yaml =|---/.test(lines[0])) {
return parse(string)
} else {
return { attributes: {}, body: string }
}
}
function parse(string) {
var match = regex.exec(string)
if (! match) {
return {
attributes: {},
body: string
}
}
var yaml = match[match.length - 1].replace(/^\s+|\s+$/g, '')
var attributes = parser.load(yaml) || {}
var body = string.replace(match[0], '')
return { attributes: attributes, body: body }
}
function test(string){
string = string || ''
return regex.test(string)
}