JS Regex: обернуть содержимое в несколько тегов, определенных в добавленных строках? - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь заменить содержимое с помощью JavaScript String replace следующим образом:

От:

line 1
line 2
! foo
! bar
! baz

Кому:

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

Т.е., обернуть каждую строку в блоке в первый тег «!», Обернуть оставшиеся теги вокруг всего блока. Очевидно, должно работать для 1+ контента и «!» Строк.

У кого-нибудь есть идеи, как сделать это за один шаг, используя группы захвата, или это потребует чего-то более сложного?

Спасибо.

1 Ответ

2 голосов
/ 19 апреля 2019

Вы можете сопоставить детали, выполнить разбиение, а затем построить его так, как вы хотите.

/^((?:(?!\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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...