带有新行的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
或\r
replace即可
这是@Andrew Dunn的post上面的一小部分
结合2可能产生可读的JS和匹配的输出
var foo = "Bob\n\ is\n\ cool.\n\";