我正尝试使用JavaScript字符串替换替换内容,如下所示:
发件人:
line 1
line 2
! foo
! bar
! baz
收件人:
<baz>
<bar>
<foo>line 1</foo>
<foo>line 2</foo>
</bar>
</baz>
即,将第一个“!”标签中的每一行换行,然后将其余标签换行。显然应该适用于1个以上的内容和“!”行。
是否有人知道如何使用捕获组一步完成此操作,还是需要更复杂的操作?
谢谢。
答案 0 :(得分:2)
您可以匹配各个部分,进行拆分,然后将其构造为所需的内容。
/^((?:(?!\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组=在\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)