JS中的换行符\n问题

4

我正在使用xmlHttp对象读取文件,并通过split方法按新行分割responseText

但是"\n"字符实际上不起作用。它在我的代码中表现得像一个错误,导致我的代码甚至无法正常运行。以下是出问题的代码行:

var lines=myPlaylist.responseText.split("\n");

如果我使用其他字符拆分myPlaylist数组,就不会出现错误。但\n会导致问题,我无法理解。

起初,我以为错误是由于white-space:nowrap引起的,因为我在Chrome上执行我的代码。虽然我从未在任何地方使用过white-space,但我尝试将其设置为normal,但它并没有起作用。同样,我在其他浏览器(Firefox、IE等)上尝试了我的代码,也没有起作用。看起来我在使用\n时遇到了问题。是否有其他方法使用换行符或者我的代码有错误?

顺便说一下,错误似乎是语法错误,因为它不仅忽略\n字符,而且简单地导致我的代码不能正常工作。

编辑: 一个例子responseText

[playlist]

File1=http://localhost:7000/Videos/Big%20Buck%20Bunny%20Trailer.ogv
Title1=Bunny Trailer
Length1=23

File2=http://localhost:7000/Videos/Dizzy%20Cat%20Video.ogv
Title2=Kedi 
Length2=33

NumberOfEntries=2

Version=2

如果我的回答解决了你的问题,请记得点赞并接受答案。只是想提醒一下,因为你是新手 :) - Olical
1
如果您找到了解决我的问题的方法,那将是我要做的第一件事,不用担心 ;) - Oralet
如果 /\n/ 不起作用,你能否发布一下你尝试分割的 responseText 的样本? - user1921
5个回答

3

我已经找到了解决我的问题的方法。
在使用随机特殊字符后,用于回车的\r字符对我的问题非常有效。
它就像一个换行符\n或者至少在我的情况下它能够胜任工作。
感谢大家的答案和有益的评论。


1

尝试使用这行代码

/\n/

使用这个替代

"\n"

1
看起来 Chuck 已经有答案了。 /\r\n|\r|\n/ - Olical
1
我不小心点了踩。只是为了“弥补”而点了赞 ;) - WestCoastProjects

1

这里有一个SO帖子,会提供更多的见解

JavaScript 字符串换行符?

编辑1: 我刚测试了一下,在新的一行上适当地分割了它。你可以发布一些你尝试拆分的内容吗?

<html>
    <script>
        function testSplit(value)
        {
            var lines = value.split(/\n/);
            alert(lines);
        }
    </script>
    <body>
        <textarea id="test" name="test" onblur="testSplit(this.value);">

        </textarea>
    </body>
</html>

编辑2:

你能否尝试将你的responseText转换成一个对象,并看一下得到了什么 - 抱歉,我只是随口说出来,因为我还没有时间模拟任何测试。

eval("var playlistResponse = ("+ myPlaylist.responseText +")");

这是一篇有些陈旧的文章,但可能对您有用:http://www.peachpit.com/articles/article.aspx?p=443580&seqNum=4


在我写这篇文章之前,我已经查看了这个和其他类似的帖子。但是/r/n或者<br>在我的情况下都不起作用。 - Oralet
所以你尝试过这一行代码吗?var lines=myPlaylist.responseText.split(/\r\n|\r|\n/); - Olical
感谢提供链接和帮助。我已经找到了解决方案。 - Oralet

1

使用\\n代替\n,我在我的代码中尝试过,它能够正常工作。


投票支持,因为这对我有用。在我的情况下,我需要拆分的字符串来自于JSON.stringify(str),所以换行符\n实际上是字面意义上的\n。所以这很有帮助。 - J.Ko

0

这个应该没有问题。

你确定myPlaylist有一个responseText属性,并且该属性是一个字符串吗?

如果出现错误,你会怎么处理?

try {
  var lines = myPlaylist.responseText.split(/\n/g);
  alert(lines.length);
} catch (e) {
  alert(e.message);
}

哦!我们都没有建议使用全局标志!我认为那可能是问题所在。@cantbereached尝试一些你以前用过的带有RegExp后面的g的东西。 - Olical
2
@cantbereached 关于 AJAX,你可能需要像这样允许跨浏览器,因为你的方法在 IE 中不起作用:https://github.com/Wolfy87/Spark/blob/master/src/ajax.js#L3 - Olical
@cantbereached:你用的是什么浏览器?Javascript控制台有没有任何有用的信息? - Martijn
好的,所以你的页面中有一些东西正在破坏JS或JS解析器,因为那个jsbin页面使用了我上面答案中的完全相同的代码。如果你提取JavaScript并将其保存到单独的文件中,然后使用<script src="file.js"></script>引用它,它是否能正常工作? - Martijn
我尝试了你的建议,但是不行。我不能在我的代码中使用任何意味着换行的东西。这会导致错误。我尝试将 \n 添加到 innerText 中,但也没有起作用 :/ - Oralet
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接