markdown-code-block-meta
Version:
A library to parse/stringify metadata of markdown code block
16 lines (15 loc) • 627 B
JavaScript
const regexp = /((?<k1>[^=\s]+)=((?<v1>(["'`])(.*?)\5)|(?<v2>\S+)))|(?<k2>\S+)/g;
export function parse(string) {
const io = (string ?? '').matchAll(regexp);
return new Map([...io]
.map((item) => item?.groups || {})
.map(({ k1, k2, v1, v2 }) => [k1 ?? k2, v1 ?? v2]));
}
export function stringify(object) {
return (object instanceof Map ? [...object.entries()] : Object.entries(object))
.map(([k, v]) => [k, v].filter((i) => i !== undefined).join('='))
.join(' ');
}
export function getValue(string) {
return string?.match?.(/(["'`])(?<value>.*?)\1/)?.groups?.value ?? string;
}