我相信这很简单,我错过了一些东西。我想用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拆分字符串以从最后一个案例中获取数组?
答案 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"]
但是,您是否担心任何具有此类反斜杠的动态数据?(例如,来自文本输入或文件输入。)不要考虑转义其中的反斜杠。因为你不需要这样做!它已经是一个格式良好的字符串,您可以使用它。只有当你自己对字符串进行硬编码时才需要转义。