将新行转换为段落/ br HTML标记,这可以是单个正则表达式吗?

时间:2011-12-20 17:02:01

标签: javascript regex string

我正在处理的应用程序让用户以明文形式输入内容,稍后将以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>';

2 个答案:

答案 0 :(得分:10)

有两种不同的替换字符串。因此,单个替换呼叫是不可能的。

但是第二个replace()可以更改为更有效的纯字符串替换。

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

所以,有一个正则表达式。 :)

<强>更新

Javascript虚张声势。字符串replace仅处理第一次出现。

请参阅How to replace all occurrences of a string in JavaScript?

还提供了replaceAll的几种可能的解决方法实现。

答案 1 :(得分:3)

我面临着类似的要求 - 将wpautop功能模仿为javascript(用于主题定制器)。

所以这是我解决问题的方法:

首先,在有两个换行符时替换大小写。

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

然后,在只剩下一个换行符的情况下更换案例。

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

最后将整个内容包装在&lt; p&gt;中标签

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

我用了&amp; nbsp;因为我的造型暗示了段落后的边距。如果您不需要它们,可以省略它们。另外,一个缺点是单行换行插入到下一段的开头,但这是我可以忍受的。