【问题标题】:Converting new lines to paragraph/br HTML tags, can this be a single regex?将新行转换为段落/br HTML 标签,这可以是单个正则表达式吗?
【发布时间】:2011-12-20 17:02:00
【问题描述】:

我正在开发的一个应用程序让用户以纯文本形式输入内容,这些内容稍后将显示为 HTML。为了让用户的内容尽可能好地显示,我们将内容转换如下:

  • 由两个或多个换行符分隔的任何文本块都包含在

    标记中。换行符(以及中间的任何空格)被删除。

  • 任何单个换行符(以及周围的空格)都将替换为
    标记。

我目前通过将文本通过两个正则表达式替换来实现这一点,但我想知道它是否可以合并为一个。这是我现在拥有的(JavaScript):

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

【问题讨论】:

  • 只是好奇,您是否使用任何类型的 html/javascript 编辑器,例如 TinyMCE 或 YUI?还是只是一个表单/文本区域元素?
  • 只是一个普通的旧表单文本区域
  • 你好,你解决了吗?

标签: javascript regex string


【解决方案1】:

有两种不同的替换字符串。所以不可能在一次替换调用中实现。

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

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

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

更新

Javascript 欺骗了我。 String replace 只处理第一次出现。

How to replace all occurrences of a string in JavaScript?

还给出了replaceAll 的几种可能的解决方法实现。

【讨论】:

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

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

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

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

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

然后,当只剩下一个换行符时,替换大小写。

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

最后将整个内容包装在

标签中

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

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

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多