Regex - заменить многострочные разрывы с одним в javascript

это какое-то переменное содержимое в javascript:   

    <meta charset="utf-8">

    <title>Some Meep meta, awesome</title>




    <-- some comment here -->
    <meta name="someMeta, yay" content="meep">

</head>

Я хочу уменьшить количество разрывов строк (неизвестное число) до одного разрыва строки, в то время как остальная часть форматирования сохраняется. Это нужно сделать в javascript с помощью regex.

У меня проблемы с табулятором или сохранение формата.

Ответ 1

Попробуйте следующее:

text.replace(/\n\s*\n/g, '\n');

В основном это поиск двух разрывов строк с пробелами между ними. И затем он заменяет их одним прерыванием строки. Из-за глобального флага g это повторяется для каждого возможного соответствия.

изменить:

возможно оставить двойной разрыв строки вместо одного

Конечно, самым простым способом было бы просто искать три разрыва строки и заменить их на два:

text.replace(/\n\s*\n\s*\n/g, '\n\n');

Если вы хотите сохранить пробел на одной из строк (по любой причине), вы также можете сделать это следующим образом:

text.replace(/(\n\s*?\n)\s*\n/, '$1');

Ответ 3

Учитывая следующее (не забудьте закодировать объекты HTML, такие как <, > и (среди прочего, очевидно) &):

<pre>
&lt;head&gt;

    &lt;meta charset="utf-8"&gt;

    &lt;title&gt;Some Meep meta, awesome&lt;/title&gt;




    &lt;-- some comment here -->
    &lt;meta name="someMeta, yay" content="meep"&gt;

&lt;/head&gt;
</pre>
<pre>
</pre>​

Работает следующий JavaScript:

var nHTML = document.getElementsByTagName('pre')[0].textContent.replace(/[\r\n]{2,}/g,'\r\n');
document.getElementsByTagName('pre')[1].appendChild(document.createTextNode(nHTML));​

JS Fiddle demo.