如何通过特殊字符串在javascript中拆分字符串

时间:2015-12-18 19:43:30

标签: javascript arrays string split

我相信这很简单,我错过了一些东西。我想用javascript分割windows中的物理路径。所以我尝试使用String#split函数,但我的结果是毋庸置疑的。

对于此字符串

"C:\CLC\VIDA\Web\_REPOSITORIO\Colectivos\ReembolsosWeb\TMP_011906169_01_01.pdf"

我收到了这个结果

var test = "C:\CLC\VIDA\Web\_REPOSITORIO\Colectivos\ReembolsosWeb\TMP_011906169_01_01.pdf";

test.split("\"); //throws error
test.split("\\"); //result in -> ["C:CLCVIDAWeb_REPOSITORIOColectivosReembolsosWebTMP_011906169_01_01.pdf"]
test.split(/\\/); // -> the regex is the same as above

最后一件事,在我的测试中,我发现要获得我想要的结果,我可以这样做

var test2 = "C:\\CLC\\VIDA\\Web\\_REPOSITORIO\\Colectivos\\ReembolsosWeb\\TMP_011906169_01_01.pdf"
test2.split("\\"); // -> ["C:", "CLC", "VIDA", "Web", "_REPOSITORIO", "Colectivos", "ReembolsosWeb", "TMP_011906169_01_01.pdf"]

所以我的问题是,如何从test var拆分字符串以从最后一个案例中获取数组?

2 个答案:

答案 0 :(得分:9)

javascript中的字符串通过反斜杠(\)支持转义序列。例如,如果您需要在字符串中添加标签,则可以在字符串中的任意位置添加\t,并将其替换为标签,\n将替换为新行。

test中的反斜杠要么转换为各自的字符,要么被删除,因为它们是无效的转义序列。

为了解决这个问题,您可以使用另一个反斜杠转义,以获得一个正常的反斜杠。缺点是这不能在javascript中完成。通常我将我的字符串粘贴到记事本/ N ++ /代码/ Sublime中,并将所有\替换为\\

由于您正在对字符串进行硬编码,因此需要转义所有反斜杠。之后,您可以使用test.split("\\"),它本身包含一个转义反斜杠。

因此,就Javascript而言,您的代码看起来像这样。

var test = "C:CLCVIDAWeb_REPOSITORIOColectivosReembolsosWebTMP_011906169_01_01.pdf";

要让javascript正确查看字符串,您需要使其看起来像这样......

var test = "C:\\CLC\\VIDA\\Web\\_REPOSITORIO\\Colectivos\\ReembolsosWeb\\TMP_011906169_01_01.pdf";

答案 1 :(得分:4)

  

首先,请注意,当字符串中有一个反斜杠时,它用于转义下一个字符。如果它旁边没有特殊字符可以逃脱,则会被忽略。

现在,看看你的字符串:

var test = "C:\CLC\VIDA\Web\_REPOSITORIO\Colectivos\ReembolsosWeb\TMP_011906169_01_01.pdf"

难道你不认为这里会忽略你的所有单反斜杠吗?

所以,解决方案很简单,你已经成功尝试过。用另一个反斜杠来逃避所有反斜杠。

var test2 = "C:\\CLC\\VIDA\\Web\\_REPOSITORIO\\Colectivos\\ReembolsosWeb\\TMP_011906169_01_01.pdf"
test2.split("\\"); // -> ["C:", "CLC", "VIDA", "Web", "_REPOSITORIO", "Colectivos", "ReembolsosWeb", "TMP_011906169_01_01.pdf"]
  

但是,您是否担心任何具有此类反斜杠的动态数据?(例如,来自文本输入或文件输入。)不要考虑转义其中的反斜杠。因为你不需要这样做!它已经是一个格式良好的字符串,您可以使用它。只有当你自己对字符串进行硬编码时才需要转义。