Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите пожалуйста собрать регулярку (https://javascript.ru/forum/misc/67952-pomogite-pozhalujjsta-sobrat-regulyarku.html)

CraftLawrence 16.03.2017 21:04

Помогите пожалуйста собрать регулярку
 
Уже час сижу над тем, чтобы из
Код:

Ряд 1
Ряд 2
"Ряд 3
Ряд 4
Ряд 5
Ряд 6"
Ряд 7
Ряд 8

сделать
Код:

Ряд 1
Ряд 2
"Ряд 3<newline>Ряд 4<newline>Ряд 5<newline>Ряд 6"
Ряд 7
Ряд 8

Меньше всего не работает
str = str.replace(/\n([.]*)/gim, '<newline>');
но оно не учитывает, что замену нужно производить внутри кавычек.

Мой внутренний логик не понимает, почему
str = str.replace(/(["]+[.]*)\n([.]*["]+)/gim, '$1<newline>$2');
не имеет никакого эффекта на строку.

рони 16.03.2017 21:23

CraftLawrence,
<textarea id="test" rows="7" cols="70">Ряд 1
Ряд 2
"Ряд 3
Ряд 4
Ряд 5
Ряд 6"
Ряд 7
Ряд 8</textarea>
<script>
      test.value = test.value.replace(/("[^"]+")/gim, function(a) {
   return a.split(/\n\r?/).join('<newline>')
});
  </script>

CraftLawrence 16.03.2017 21:41

Цитата:

Сообщение от рони (Сообщение 447608)
CraftLawrence,
<textarea id="test" rows="7" cols="70">Ряд 1
Ряд 2
"Ряд 3
Ряд 4
Ряд 5
Ряд 6"
Ряд 7
Ряд 8</textarea>
<script>
      test.value = test.value.replace(/("[^"]+")/gim, function(a) {
   return a.split(/\n\r?/).join('<newline>')
});
  </script>

Обалдеть. Работает.
Я даже не удивлен, что тут всё на много сложнее, чем я думал. Огромное спасибо!

Alexandroppolus 17.03.2017 07:58

<textarea id="test" rows="7" cols="70">Ряд 1
Ряд 2
"Ряд 3
Ряд 4
Ряд 5
Ряд 6"
Ряд 7
Ряд 8</textarea>
<script>
test.value = test.value.replace(/"|\r?\n/g, function f(a) {
   return (a == '"') ? (f.inQ = !f.inQ, a) : (f.inQ ? '<newline>' : a);
});
</script>


Часовой пояс GMT +3, время: 00:32.