JQuery检测字符串中的换行符

时间:2015-02-23 06:49:40

标签: javascript jquery

后端返回的JavaScript中的“str”变量包含一个字符串,其中有几段用断路器分隔..当我这样做时:

console.log(str);

Firefox控制台显示:

"This is paragraph 1.

This is paragraph2.

This is paragraph3"

问题是,这个str没有用“\ n”字符分隔。正如您在控制台输出中看到的那样,它只是由不可见的换行符分隔开来。有没有办法检测这个换行符?我最终要做的是用“br”标签替换这些不可见的换行符,以便我可以将它附加到html文档中。

有办法做到这一点吗?

由于

(不幸的是,没有办法改变后端..)

4 个答案:

答案 0 :(得分:2)

看看nl2br on php.js,这看起来正是您正在寻找的。基本上,它是:

function nl2br (str, is_xhtml) {
    var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
    return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}

演示:http://devilmaycode.altervista.org/jquery-convert-line-breaks-to-br-nl2br-equivalent/

答案 1 :(得分:0)

var text = "This is paragraph 1.

            This is paragraph2.

            This is paragraph3";


var matches = text.match(/\n/g);
var new_lines = matches ? matches.length : 0;  //Get no. of new line here

Demo

答案 2 :(得分:0)

实际上,Firefox控制台中的“隐形换行符”是\n个字符。我在下面的代码中添加了一行来确认这一点。此外,浏览器通常会忽略\n字符而使用<br/>,因此您拥有的str变量应该很好地显示为一行。但要识别“\ n”字符并将其替换为<br />,请尝试使用

<span id="someText">This is 
some text 
that I need 
to modify
</span>

<script>
	var text = document.getElementById("someText") ; 
	alert(text.innerHTML.match(/\n/g).length) ; // confirm \n are in var
	alert (text.innerHTML) ; 
	var withBRs = text.innerHTML.replace(/\n/g, "<br />") ; 
	text.innerHTML = withBRs ; 
</script> 

答案 3 :(得分:0)

作为另一种思想(如果可能的话,在您的情况下),因为您基本上希望在保留换行符的情况下以HTML格式呈现文本,您可以使用CSS为您执行此操作。请查看white-space属性,其值为pre-linepre-wrap

  

空格的序列将折叠成单个空格。文本将在必要时包装,并在换行符时 -   W3Schools

因此,如果您将字符串作为段落附加到DOM:

    <p class="preserveLineBreaks">This is paragraph 1.

This is paragraph2.

This is paragraph3<p>

然后使用如下的简单CSS选择器,您将获得预期的结果:

.preserveLineBreaks {
    white-space: pre-line; //or pre-wrap
}