簡體   English   中英

將新行轉換為段落/ br HTML標記,這可以是單個正則表達式嗎?

[英]Converting new lines to paragraph/br HTML tags, can this be a single regex?

我正在處理的應用程序讓用戶以明文形式輸入內容,稍后將以HTML格式顯示。 為了盡可能好地顯示用戶的內容,我們將內容轉換如下:

  • 由兩個或多個新行字符分隔的任何文本塊都包含在<p>標記中。 剝離出新的行字符(以及其間的任何空格)。

  • 任何單個新行字符(以及周圍的空格)都將替換為<br />標記。

我目前通過將文本放在兩個正則表達式替換中來實現這一點,但是想知道它是否可以合並為一個。 這就是我現在所擁有的(JavaScript):

// content holds the text to process
content = '<p>' + content.replace(/\n([ \t]*\n)+/g, '</p><p>')
                 .replace(/\n/g, '<br />') + '</p>';

有兩種不同的替換字符串。 因此,單個替換呼叫是不可能的。

但第二個replace()可以更改為更有效的純字符串替換。

content = '<p>' + content.replace(/\n([ \t]*\n)+/g, '</p><p>')
                 .replace('\n', '<br />') + '</p>';

所以,有單一的正則表達式。 :)

更新

Javascript詐唬了我。 字符串replace句柄僅出現第一次。

請參見如何在JavaScript中替換所有出現的字符串?

還給出了replaceAll幾種可能的解決方法實現。

我面臨着類似的要求 - 將wpautop功能模仿為javascript(用於主題定制器)。

所以這是我解決問題的方法:

首先,在有兩個換行符時更換外殼。

to = to.replace(/\n{2}/g, '&nbsp;</p><p>');

然后,在只剩下一個換行符時替換大小寫。

to = to.replace(/\n/g, '&nbsp;<br />');

最后將整個內容包裝在<p>標簽中

to = '<p>' + to + '</p>';

我用了&nbsp; 因為我的造型暗示了段落后的邊距。 如果您不需要它們,可以省略它們。 另外,一個缺點是單行換行插入到下一段的開頭,但這是我可以忍受的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM