我正在尝试使用 JavaScript 字符串替换来替换内容,如下所示:
来自:
line 1
line 2
! foo
! bar
! baz
致:
<baz>
<bar>
<foo>line 1</foo>
<foo>line 2</foo>
</bar>
</baz>
即,将每一行包装在第一个“!”的 block 中tag,将剩余的标签包裹在整个 block 周围。显然应该适用于 1+ 内容和“!”行。
有谁知道如何使用捕获组一步完成此操作,或者这需要更复杂的东西吗?
谢谢。
最佳答案
您可以匹配各个部分,进行拆分,然后将其构建为您想要的内容。
/^((?:(?!\r?\n!)[\S\s])+)\s*\r?\n![ \t]*(.+)\s*\r?\n![ \t]*((?:(?!\s*\r?\n!)[\S\s](?:\s*\r?\n![ \t]*)?)+)/
https://regex101.com/r/Ji5ys6/1
组 1 = 行,在 \s*\r?\n\s*
上分割
第 2 组 = foo
第 3 组 = bar, baz,... 在 \s*!\s*
^
( # (1 start), line1, line 2, ...
(?:
(?! \r? \n ! )
[\S\s]
)+
) # (1 end)
\s* \r? \n ! [ \t]*
( .+ ) # (2), foo
\s* \r? \n ! [ \t]*
( # (3 start), bar, baz, ...
(?:
(?! \s* \r? \n ! )
[\S\s]
(?: \s* \r? \n ! [ \t]* )?
)+
) # (3 end)
关于javascript - JS 正则表达式 : Wrap content in multiple tags defined in appended lines?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55764226/