jQuery javascript regex用\ n替换<br>


70

我怎样写一个正则表达式来替换<br /><br>\n。我正在尝试将文本从div移动到textarea,但是不想<br>在textarea中显示,因此我想用替换\n


您使用哪种服务器端语言?如果php则nl2br()是您需要的功能
diEcho 2011年

Answers:


183
var str = document.getElementById('mydiv').innerHTML;
document.getElementById('mytextarea').innerHTML = str.replace(/<br\s*[\/]?>/gi, "\n");

或使用jQuery:

var str = $("#mydiv").html();
var regex = /<br\s*[\/]?>/gi;
$("#mydiv").html(str.replace(regex, "\n"));

编辑:添加i标志

edit2:您可以使用/<br[^>]*>/gi它将匹配br和之间的任何内容slash,例如<br class="clear" />


2
这有效,但我只是注意到IE6,7,8显示大写<BR>字母我们如何做到这一点,以便它可以同时使用大小写字母。
Pinkie

1
我认为应该放在文本区域内。
詹姆斯·科里

2
@Pinkie,您可以添加不区分大小写的i标志
Teneff,2011年

@pinkie用[bB] [rR]替换正则表达式中的br或在g后面添加一个i
James Khoury


5

如果您想直接更改DOM而又不弄乱内部HTML,则为真正的jQuery方法:

$('#text')。find('br')。prepend(document.createTextNode('\ n'))。remove();

前置元素中插入,before()是我们在这里需要的方法:

$('#text').find('br').before(document.createTextNode('\n')).remove();

代码将找到任何<br>元素,使用换行符插入原始文本,然后删除<br>元素。

如果您使用长文本,这应该会更快,因为这里没有字符串操作。

要显示新行:

$('#text').css('white-space', 'pre-line');

对remove()的调用将删除新创建的textNode。由于prepend()返回前置元素,因此必须事先调用next()。因此它必须是:>>>> $('#text')。find('br')。prepend(document.createTextNode('\ n'))。next()。remove(); <<< <虽然还是+1。=)
Clox

@Clox:prepend返回原始选择器,请参阅jsfiddle.net/nothrem/ygjb5z0h。但是可能的问题是prepend()将新元素插入到旧元素中,因此当您删除旧元素之后,它也会同时删除新元素。正确使用的方法是before()。
Radek Pech

4

便宜又讨厌的是:

jQuery("#myDiv").html().replace("<br>", "\n").replace("<br />", "\n")

编辑

jQuery("#myTextArea").val(
    jQuery("#myDiv").html()
        .replace(/\<br\>/g, "\n")
        .replace(/\<br \/\>/g, "\n")
);

如果需要,还创建了一个jsfiddle:http : //jsfiddle.net/2D3xx/


1
需要通过“ g”作为第三个arg替换
Adam Bergmark 2011年

@adam Opps!错过了。谢谢亚当。另外,您答案中的正则表达式更强大。
James Khoury

有时会发生一些简单的错误,例如:有人可以使用“ </br>”,在这种情况下,请使用replace(/ <\ s * \ /?br> / ig,“ \ r \ n”)
eegloo,2013年

嗨,如果像我一样,您继承了html中的文本,其中包含由PHP的nl2br()函数格式化的换行符,则您将获得以下换行符:<br />。对我而言,此解决方案的一部分有效:(在javascript中,在对象$ .text_item上)$ .text_item.replace(/ \ <br \/\> / g,“ \ n”); ,它使我可以使用Mustache作为模板来动态显示此文本。我投票赞成在<textarea>中很好地显示换行符!
SNS-Web et Informatique

2

与jQuery无关,但是如果您想从字符串中修剪模式,请使用正则表达式:

<textarea id="ta0"></textarea>
<button onclick="
  var ta = document.getElementById('ta0');
  var text = 'some<br>text<br />to<br/>replace';
  var re = /<br *\/?>/gi;
  ta.value = text.replace(re, '\n');
">Add stuff to text area</button>

有时会发生一些简单的错误,例如:有人可以使用“ </br>”,在这种情况下,请使用replace(/ <\ s * \ /?br> / ig,“ \ r \ n”)
eegloo,2013年

@eegloo-</br>是一个直接的错误。严格来说,它会关闭前面的所有开始标记,但是浏览器似乎很容忍并将其转换为<br>。另外,OP也没有要求。
RobG
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.