如何在JavaScript中使用反斜杠分割字符串?

8

我有一个包含两个反斜杠的字符串:

str = "active - error - oakp-ms-001 Volume Usage-E:\ PercentUsed E:\"

我希望从上述字符串中仅获取“oakp-ms-001”,但由于该字符串中包含反斜杠,因此我无法拆分该字符串。 请告诉我是否有任何解决方案?

4
在字符串中,反斜杠应该用另一个反斜杠进行转义。 - VisioN
"...但是由于字符串中包含反斜杠,我无法拆分该字符串。" 为什么?反斜杠与您想要获取的内容有什么关系? - T.J. Crowder
@ 视觉:该字符串无法更改。 - user3774907
@ T.J Crowder:str.split() 方法无法使用反斜杠,但是当我将它们删除后,它就可以正常工作了。 - user3774907
1
@user3774907: 引用的代码并没有输出任何内容,因为字符串末尾缺少结束的 " 符号(末尾的 \" 是字符串中的 " 字符,如果字符串在某个地方结束,则会输出该字符)。 - T.J. Crowder
5个回答

11

首先,我要指出你引用的代码存在语法错误:

str = "active - error - oakp-ms-001 Volume Usage-E:\ PercentUsed E:\"

那个字符串没有结束符",因为末尾的 \ 是一个被转义的引号 ",而不是斜杠后跟的结束引号。

如果字符串中有结束引号,它将不会包含任何反斜杠(带空格的 \ 是无效的转义字符,最终只变成了一个空格)。

因此,让我们假设一些有效的内容,而不是语法错误:

str = "active - error - oakp-ms-001 Volume Usage-E:\\ PercentUsed E:\\";

那个字符串里面有反斜杠。

你需要做的事情实际上并不涉及“分割”,但是如果你想在包含反斜杠的内容上进行分割:

var parts = str.split("\\"); // Splits on a single backslash

但是我不明白如何通过拆分来解决你想要的问题。

你需要确定靠近你所需内容的字符串的哪些部分是一致的,然后创建一个东西(可能是具有捕获组的正则表达式),来查找相对于那些不变的文本而言会变化的文本。

例如:

var str = "active - error - oakp-ms-001 Volume Usage-E:\\ PercentUsed E:\\";
var match = str.match(/error - (.*?) ?Volume/);
if (match) {
    console.log(match[1]); // oakp-ms-001
}

我假设"error - "部分和"Volume"部分(可能在前面有空格)是一致的,并且您想要它们之间的文本。

实时示例


4
你想写var parts = str.split("\\");吗? - VisioN
@VisioN:谢谢你发现了这个问题! - T.J. Crowder
@T. J Crowder:你在字符串中又加了一个反斜杠? - user3774907
但原始字符串中只会有一个反斜杠。 - user3774907
在字符串字面值中,如果你想要一个实际的反斜杠,你需要写两个。这是因为在字符串字面值中,反斜杠是一个“转义”字符。它的作用取决于下一个字符。\"表示字符串中的双引号,双反斜杠表示字符串中的单个反斜杠,\n表示换行等。 - T.J. Crowder
@user3774907:再说一遍,你引用的内容是无效的,无法正确解析。 - T.J. Crowder

4

JSON.stringify(fileName).split("\\");

在 split 函数内应该使用双反斜杠enter image description here


1
真疯狂,它对我不起作用。它能工作,但仍带有“\”。 log.slice(log.indexOf("level"), log.indexOf('",')).split("\") ["level":"Info"] - Lorenzo Covarrubias

1
这是一个非终止字符串(您需要转义闭合引号),因此我假设您的字符串更像这样:
str = "active - error - oakp-ms-001 Volume Usage-E:\\ PercentUsed E:\\";
如果您想按反斜杠和空格拆分字符串,第一步是按反斜杠拆分,如下所示:
step2 = str.split("\\");
请注意,在这里必须转义反斜杠。
第二件要做的事情是现在通过空格拆分此字符串,但由于它是一个数组,因此您必须使用循环来执行此操作:
var step3 = [];
for(var i = 0; i < step2.length; i++){
    step3 += step2[i].split(" ");
}

然后,您可以通过“,”字符简单地拆分步骤3,并找到“Volume”之前的短语。这可能不是最好的答案,但它可以获取您想要的数据。


0

转义您的反斜杠!\ 变成 \\,因此实际上您将像这样进行分配:

str = "active - error - oakp-ms-001 Volume Usage-E:\\ PercentUsed E:\\"


-3

这是一个关于这个问题的解决方案 str.split(/[\$]/)


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