带有新行的JavaScriptstring – 但不能使用\ n

我有一个string中有新的行。我想将这些转换为HTML <br> s,但我很难检测到他们。

想象一下这样的JavaScriptstring:

 var foo = "Bob is cool"; 

他们是我需要检测的新线。 他们没有使用\n特殊字符 – 他们只是普通的格式。

它不工作的原因是因为JavaScriptstring必须在下一个换行符之前终止(显然不是\n )。 \n存在的原因是允许开发人员轻松地将换行符(ASCII:10)放入其string中。

当你有一个string,看起来像这样:

 //Note lack of terminating double quote var foo = "Bob 

你的代码在这一点上会有一个语法错误,并停止运行。

如果你希望有一个跨越多行的string,你可以在终止这行之前插入一个反斜杠字符' \ ',如下所示:

 //Perfectly valid code var foo = "Bob \ is \ cool."; 

但是,该string在string被分解成单独的行的位置不会包含\n字符。 将换行符插入string的唯一方法是插入一个值为10的字符,其中最简单的方法就是\n转义字符。

 var foo = "Bob\nis\ncool."; 

更新:我刚刚在JavaScript-ES6中遇到了一个叫做Template literals的精彩的语法devise。 你想要做的事情可以使用` (反向或重音重音字符)来完成。

 var foo = `Bob is cool`; 

在这种情况下, foo === "Bob\nis\ncool"是真实的。

为什么devise师决定` ... `可以没有终止,但是" ... "' ... '是非法的,因为换行符不在我身边。

只要确定定位浏览器支持ES6指定的Javascript实现。


PS这个语法有一个非常酷的function,类似于PHP和更多的脚本语言,即“ Tagged template literals ”,其中你可以有一个像这样的string:

 var a = 'Hello', b = 'World'; console.log(`The computer says ${ a.toUpperCase() }, ${b}!`); // Prints "The computer says HELLO, World!" 

检查\n\r\r\n

有几个新行的表示,请参阅http://en.wikipedia.org/wiki/Newline#Representations

我不认为你明白\ n如何工作。 结果string仍然只包含一个值为10的字节。这在javascript源代码中用\ n表示。

你发布的代码片段实际上并不工作,但是如果是这样的话,换行符等同于\ n,除非它是一个Windows风格的换行符,在这种情况下它将是\ r \ n。 (但即使更换仍然可以)。

您可以使用以下function:

  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'); } 

像这样:

 var mystr="line\nanother line\nanother line"; mystr=nl2br(mystr); alert(mystr); 

这应该提醒line<br>another line<br>another line

该函数的来源是从这里: http : //phpjs.org/functions/nl2br : 480

这模仿php的nl2br函数…

我认为他们使用\n反正它不可见,或者他们使用\r 。 所以只要用\n\rreplace即可

这是@Andrew Dunn的post上面的一小部分

结合2可能产生可读的JS和匹配的输出

  var foo = "Bob\n\ is\n\ cool.\n\";