import { findAndReplace } from 'mdast-util-find-and-replace' const subGroup = '[A-Za-z][\\w_]+' const subRegex = new RegExp( '~(' + subGroup + '(?:\\/' + subGroup + ')?)', 'gi' ) export default function sub (options) { return function transformer (tree) { findAndReplace( tree, [ [subRegex, replaceSub] ], { ignore: ['link', 'linkReference'] } ) } function replaceSub (value, sub, match) { if ( /[\w`]/.test(match.input.charAt(match.index - 1)) || /[/\w`]/.test(match.input.charAt(match.index + value.length)) ) { return false } const node = { type: 'text', value } return { type: 'link', title: null, url: '/~' + sub, children: [node] } } }