···121121// from https://github.com/escwxyz/remark-obsidian-callout/blob/main/src/index.ts
122122const calloutRegex = new RegExp(/^\[\!([\w-]+)\|?(.+?)?\]([+-]?)/)
123123const calloutLineRegex = new RegExp(/^> *\[\!\w+\|?.*?\][+-]?.*$/gm)
124124-// (?:^| ) -> non-capturing group, tag should start be separated by a space or be the start of the line
124124+// (?<=^| ) -> a lookbehind assertion, tag should start be separated by a space or be the start of the line
125125// #(...) -> capturing group, tag itself must start with #
126126// (?:[-_\p{L}\d\p{Z}])+ -> non-capturing group, non-empty string of (Unicode-aware) alpha-numeric characters and symbols, hyphens and/or underscores
127127// (?:\/[-_\p{L}\d\p{Z}]+)*) -> non-capturing group, matches an arbitrary number of tag strings separated by "/"
128128const tagRegex = new RegExp(
129129- /(?:^| )#((?:[-_\p{L}\p{Emoji}\p{M}\d])+(?:\/[-_\p{L}\p{Emoji}\p{M}\d]+)*)/gu,
129129+ /(?<=^| )#((?:[-_\p{L}\p{Emoji}\p{M}\d])+(?:\/[-_\p{L}\p{Emoji}\p{M}\d]+)*)/gu,
130130)
131131const blockReferenceRegex = new RegExp(/\^([-_A-Za-z0-9]+)$/g)
132132const ytLinkRegex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/