javascript - JS 正则表达式 : Wrap content in multiple tags defined in appended lines?

标签 javascript regex

我正在尝试使用 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/

相关文章:

c++ - char 和 wchar_t 的模板没有给出匹配的成员

javascript - 使用 javascript 或 jquery 通过 get 将数据从一种表单推送到另一种表单

javascript - django+javascript - 如何处理来自不同来源/函数的数据?

JavaScript 正则表达式将字符串拆分为单词

php - 正则表达式: Get TeX commands

正则表达式 - 可选引号之间

javascript - 如何在 Chrome DevTools 控制台的折叠组中记录消息

javascript - 检索 getJSON 属性值

JavaScript 对 html 文件进行加密解密

python - pandas str.replace 什么也得不到