繁体   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