将文本区域中的 <br /> 替换为行分隔符(Javascript)

Posted

技术标签:

【中文标题】将文本区域中的 <br /> 替换为行分隔符(Javascript)【英文标题】:Replace <br /> in a textarea with a line separator ( Javascript ) 【发布时间】:2013-02-19 22:39:05 【问题描述】:

我想这将在两分钟内得到答复,但我无法谷歌找到解决方案。

已尝试:this、this

我有一个文本区域,它首先从服务器接收一些数据(动态使用 AJAX)。 textarea 中的文本可能如下所示:

Hello&nbsp;Cruel&nbsp;<br&nbsp;/>World!

我的用户不喜欢这样的外观:)

于是我写了一个很简单的函数:

    function replacehtml( string_to_replace ) 
    
        var result = replaceAll( string_to_replace, "&nbsp;", " ");
        result = result.replace(/<br\s*\/?>/mg,"\n\r"); // or "\n", "\r", "\r\n"
        return result;
     

我的输出如下所示:

Hello Cruel World!

代替:

Hello Cruel
World!

我想要一个最多 5 行且可应用于所有浏览器和操作系统的解决方案

顺便说一句,我不喜欢正则表达式,所以也许真正的问题会在那里..

更新

From this answer 和 Michael_B 先生我得到了这个解决方案,它对我有用,但我有一种预感,这个角色可能不是最好的解决方案:

function replaceHtml( string_to_replace ) 

    return string_to_replace.replace(/&nbsp;/g, ' ').replace(/<br.*?>/g, '\u2028');

【问题讨论】:

我不确定,但试试 '\n\r' 而不是 "\n\r" (单引号替换双引号) 似乎工作:jsfiddle.net/Xfffg @joDev 单引号和双引号在javascript中是等价的 replaceAll 不是函数 @Explosion Pills:不敢相信,但它对我不起作用..function replaceHtml( string_to_replace ) var result = string_to_replace.replace(/&amp;nbsp;/g, ' ').replace(/&lt;br.*?&gt;/g, '\n'); return result; 【参考方案1】:

基于@Explosion Pills 评论和 jsFiddle

DEMO

function replaceHtml( string_to_replace ) 

        return string_to_replace.replace(/&nbsp;/g, ' ').replace(/<br.*?>/g, '\n');

更新基于New line in text area

Updated DEMO

也许这会解决您与 \n 相关的问题 - 需要 jQuery。

function replaceHtml(string_to_replace) 
    return $("<div>").append(string_to_replace.replace(/&nbsp;/g, ' ').replace(/<br.*?>/g, '&#13;&#10;')).text();

【讨论】:

我正在使用 Mozilla 19.0,它对我来说运行良好。您是在 jsFiddle 上还是在您自己的解决方案中查看它? 在 jsFiddle 上它可以工作,而不是在我的解决方案上。我只是试图用这个替换 '\n' 部分:来自this answer 的'\u2028' 它适用于我的解决方案,但我有一种预感,这不是最好的方法。。我仍然会给你一个好的代码+1,但直到我弄清楚 textarea 中发生了什么,我不知道是否可以将此问题标记为已回答。 您能否提供更多代码...您是在文本区域中输入此信息吗?什么叫replaceHtml?你能在 jsfiddle 中重现 \n 的问题吗? 如果我将解决方案更改为 \u2028,它在我的机器上的 Chrome 或 Firefox 上不起作用。 有很多代码在运行,我不认为我可以在 jsFiddle 中重现问题。我可以写下正在发生的逻辑,以及正在发生的事情的一些源代码,但这将是很多代码,我认为它不会帮助您解决我的问题。顺便说一下,#13#10 的事情也不适用于 chrome..【参考方案2】:

如果我错了,请纠正我,但它不应该是$.replaceAll(),因为它是一个 jQuery 函数而不是 JS?

还是纯 Javascript 中的 replace()

【讨论】:

老实说:不知道有一个 $.replaceAll() :)【参考方案3】:

你不需要在那里使用 jQuery:

function replaceHtml( string_to_replace ) 

    var result = string_to_replace.replace(/\&nbsp;/g, ' ').replace(/<br\s*\/?>/mg,"\n\r"); // or "\n", "\r", "\r\n"
    return result;
 

【讨论】:

以上是关于将文本区域中的 <br /> 替换为行分隔符(Javascript)的主要内容,如果未能解决你的问题,请参考以下文章

将文本区域中的少量文本更改为粗体

文本区域中的换行符

Chrome 扩展替换当前文本区域中的单词

在文本区域中捕获换行符(换行符、换行符)字符

通过javascript将<br>插入文本区域[重复]

如何通过跳过换行符将文本区域内容替换为“*”