我正在处理的应用程序让用户以明文形式输入内容,稍后将以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>';
答案 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, ' </p><p>');
然后,在只剩下一个换行符的情况下更换案例。
to = to.replace(/\n/g, ' <br />');
最后将整个内容包装在&lt; p&gt;中标签
to = '<p>' + to + '</p>';
我用了&amp; nbsp;因为我的造型暗示了段落后的边距。如果您不需要它们,可以省略它们。另外,一个缺点是单行换行插入到下一段的开头,但这是我可以忍受的。