JS Regex:将内容包装在附加行中定义的多个标签中吗?

时间:2019-04-19 15:31:57

标签: javascript regex

我正尝试使用JavaScript字符串替换替换内容,如下所示:

发件人:

line 1
line 2
! foo
! bar
! baz

收件人:

<baz>
<bar>
<foo>line 1</foo>
<foo>line 2</foo>
</bar>
</baz>

即,将第一个“!”标签中的每一行换行,然后将其余标签换行。显然应该适用于1个以上的内容和“!”行。

是否有人知道如何使用捕获组一步完成此操作,还是需要更复杂的操作?

谢谢。

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*

上划分的 bar,baz,...
 ^ 
 (                             # (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)