我怀疑答案很简单,而且我想的不是正确的方法。
我编写了一个脚本,该脚本可在文本文件(此处为示例:https://pastebin.com/TdHcssvf)中的两个定界符@[name]
和@[/name]
之间找到任何内容,并将其提取到JSON对象中。 / p>
这一切都很好,但是我还需要用[name]
替换所有匹配的内容(包括定界符)。
这有效,但仅与第一个实例匹配,其他所有内容均被忽略,我不明白为什么。
完整的脚本在这里:https://pastebin.com/C6utdbQN,我遇到麻烦的方法是replaceComponentWithTag()
我怀疑我正在以错误的方式进行操作,但是,我对RegEx的了解还不足以了解正确的操作方法。
replaceComponentWithTag()
方法使用extractComponents()
方法(生成组件列表)映射它可以找到的所有组件(内容+分隔符)。然后,在每个地图迭代中,它会遍历数据以查找匹配的组件,并仅用相同名称的标签替换。
功能如下:
const replaceComponentWithTag = (data) => {
return extractComponents(data).map((component) => {
const reAll = XRegExp(`@\\[${component.name}[.\\w_+]*\\].*@\\[\\/${component.name}\\]`, 'gms')
return XRegExp.replace(data, reAll, `[${component.name}]`)
})
}
我怀疑我对此考虑过多,并且可能有一个非常简单的正则表达式可以找到定界符和内容,并将其替换为捕获组的内容,但是我无法弄清楚那是什么。
tl;博士。
我要转这个:
@[NoteBlock]
#### Be Careful
Eu laboris eiusmod ut exercitation minim laboris ipsum magna consectetur est [commodo](/nope).
@[/NoteBlock]
为此:[NoteBlock]
。该标记不会始终是NoteBlock,因此它应与定界符内的任何内容匹配。页面上总会有一个以上的组件,有些可能会多次出现。
我希望这可以使事情变得清晰起来。