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

rr.*_*rr. 8 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>';
Run Code Online (Sandbox Code Playgroud)

Vad*_*zim 10

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

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

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

所以,有单一的正则表达式.:)

更新

Javascript诈唬了我.字符串replace只处理第一次出现.

请参见如何在JavaScript中替换所有出现的字符串?

还有一些可能的解决方法实现replaceAll.

  • 此解决方案的问题是第二个替换调用仅替换第一个匹配项,而不是所有匹配项。您需要`.replace(/\n/g, '&lt;br /&gt;')`来捕获*所有*剩余的换行符。 (2认同)

nob*_*bug 5

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

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

首先,当有两个换行符时更换外壳。

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

然后,当只剩下一个换行符时更换外壳。

to = to.replace(/\n/g, '&nbsp;<br />');
Run Code Online (Sandbox Code Playgroud)

最后将整个内容包裹在一个 <p> 标签中

to = '<p>' + to + '</p>';
Run Code Online (Sandbox Code Playgroud)

我使用了   因为我的样式暗示了段落后的边距。如果你不需要它们,你可以省略它们。此外,一个缺点是在下一段的开头插入了单个换行符,但这是我可以接受的。