XRegExP.replace仅替换循环中的一个匹配项

时间:2018-11-14 15:48:18

标签: javascript regex xregexp

我怀疑答案很简单,而且我想的不是正确的方法。

我编写了一个脚本,该脚本可在文本文件(此处为示例: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,因此它应与定界符内的任何内容匹配。页面上总会有一个以上的组件,有些可能会多次出现。

我希望这可以使事情变得清晰起来。

0 个答案:

没有答案