JavaScript中的字符串拆分错误

JavaScript中的字符串拆分错误,javascript,split,Javascript,Split,我正在尝试根据delimter\$拆分字符串。我试过了,但没有成功 我拥有的代码位于,也粘贴在下面 问题:在本例中,按\$拆分时,我做错了什么 var trickyString=“sd sewq wee r ttttt$300 rrtrt utu iwiwi\$500 kjgf ihj\$215 ghi”; //document.getElementById(“div0”).innerHTML=trickyString; 函数splitString(){ //为什么按\$拆分不提供3个元素,而

我正在尝试根据delimter
\$
拆分字符串。我试过了,但没有成功

我拥有的代码位于,也粘贴在下面

问题:在本例中,按
\$
拆分时,我做错了什么

var trickyString=“sd sewq wee r ttttt$300 rrtrt utu iwiwi\$500 kjgf ihj\$215 ghi”;
//document.getElementById(“div0”).innerHTML=trickyString;
函数splitString(){
//为什么按\$拆分不提供3个元素,而是提供4个元素?
var array1=trickyString.split(/\$/);
document.getElementById(“div1”).innerHTML=“Length=“+array1.Length+”;
对于(变量i=0;i”+array1[i];
}
var array2=trickyString.split($);
document.getElementById(“div2”).innerHTML=“Length=“+array2.Length+”;
对于(var j=0;j”+array2[j];
}
}
拆分一个棘手的字符串
棘手的字符串
sd sewq wee r ttttt$300 rrtrt utu iwiwi\$500 kjgf ihj\$215 ghi
使用\$作为分隔符进行拆分
使用$作为分隔符进行拆分

问题在于斜杠在JS字符串和正则表达式中都有特殊的含义

这里有两个关键部分:

var trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \$500 kjgf ihj \$215 ghi"; 
应该是:

var trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \\$500 kjgf ihj \\$215 ghi"; 
var array1 = trickyString.split(/\\\$/g);
因为
\$
将被解释为
$

而且:

var array1 = trickyString.split(/\$/);
应该是:

var trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \\$500 kjgf ihj \\$215 ghi"; 
var array1 = trickyString.split(/\\\$/g);
由于
\$
将被解释为
$
,因此第一个
\\
$
本身具有特殊含义,因此第二个
\$

这是我使用的代码:

var trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \\$500 kjgf ihj \\$215 ghi"; 

//document.getElementById("div0").innerHTML = trickyString;

function splitString() {
    //Why is splitting by \$ not giving 3 elements but is instead giving 4 elements?
    var array1 = trickyString.split(/\\\$/g);
    document.getElementById("div1").innerHTML = "<b>Length = " + array1.length + "</b>";
    for (var i = 0; i < array1.length; i++) {
        document.getElementById("div1").innerHTML += "<br>" + array1[i];
    }

    var array2 = trickyString.split("$");
    document.getElementById("div2").innerHTML = "<b>Length = " + array2.length + "</b>";
    for (var j = 0; j < array1.length; j++) {
        document.getElementById("div2").innerHTML += "<br>" + array2[j];
    }
}

问题是斜杠在JS字符串和正则表达式中都有特殊的含义

这里有两个关键部分:

var trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \$500 kjgf ihj \$215 ghi"; 
应该是:

var trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \\$500 kjgf ihj \\$215 ghi"; 
var array1 = trickyString.split(/\\\$/g);
因为
\$
将被解释为
$

而且:

var array1 = trickyString.split(/\$/);
应该是:

var trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \\$500 kjgf ihj \\$215 ghi"; 
var array1 = trickyString.split(/\\\$/g);
由于
\$
将被解释为
$
,因此第一个
\\
$
本身具有特殊含义,因此第二个
\$

这是我使用的代码:

var trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \\$500 kjgf ihj \\$215 ghi"; 

//document.getElementById("div0").innerHTML = trickyString;

function splitString() {
    //Why is splitting by \$ not giving 3 elements but is instead giving 4 elements?
    var array1 = trickyString.split(/\\\$/g);
    document.getElementById("div1").innerHTML = "<b>Length = " + array1.length + "</b>";
    for (var i = 0; i < array1.length; i++) {
        document.getElementById("div1").innerHTML += "<br>" + array1[i];
    }

    var array2 = trickyString.split("$");
    document.getElementById("div2").innerHTML = "<b>Length = " + array2.length + "</b>";
    for (var j = 0; j < array1.length; j++) {
        document.getElementById("div2").innerHTML += "<br>" + array2[j];
    }
}

您的问题源于以下事实:
/\$/
在正则表达式中,
\$
被解释为请求将
$
视为文字字符

您应该使用的正则表达式是
/\\$/
。如图所示

您的字符串中也遇到了类似的问题,您将
\$
放入字符串中,它被视为请求使用字符
$
。如果执行
console.log(trickyString),则可以看到这一点,您会注意到输出中没有
\
。您需要双重转义引号:

const trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \\$500 kjgf ihj \\$215 ghi;"

您的问题源于以下事实:
/\$/
在正则表达式中,
\$
被解释为请求将
$
视为文字字符

您应该使用的正则表达式是
/\\$/
。如图所示

您的字符串中也遇到了类似的问题,您将
\$
放入字符串中,它被视为请求使用字符
$
。如果执行
console.log(trickyString),则可以看到这一点,您会注意到输出中没有
\
。您需要双重转义引号:

const trickyString = "sd sewq wee r r ttttt $300 rrtrt utu iwiwi \\$500 kjgf ihj \\$215 ghi;"


它似乎起作用了——你得到了四个项目。您期望的结果是什么?我在主字符串中有2个
\$
字符串,因此基于
\$
的拆分不应该导致3个元素吗?可能会出现重复的结果-您得到四个项目。您期望的结果是什么?我在主字符串中有2个
\$
字符串,因此基于
\$
的拆分不应该导致3个元素吗?我尝试了您的建议,但仍然得到1个元素,而不是3个。您的输入数据错误。字符串
“\$”
实际上被解析为
“$”
,因为它被解释为转义的美元符号。@Psytronic,所以即使不需要转义美元,在$之前只有1个反斜杠被视为转义字符。这是有道理的。将
trickyString
更改为包含
\\$
而不是“\$”后,它就可以工作了。谢谢。正确,JS将始终将反斜杠视为转义字符的请求。虽然字符串中不需要转义
$
,但在正则表达式中需要转义,因为
$
对正则表达式有特殊意义(字符串的结尾,或者如果正则表达式设置了
m
标志,则转义为行的结尾)你的最后一条评论太棒了,因为我忽略了一点,
$
在正则表达式中有特殊的含义。现在很清楚了。谢谢。我试过你的建议,但我还是得到了1个元素而不是3个。你的输入数据是错误的。字符串
“\$”
实际上被解析为
“$”
,因为它被解释为转义的美元符号。@Psytronic,所以即使不需要转义美元,在$之前只有1个反斜杠被视为转义字符。这是有道理的。将
trickyString
更改为包含
\\$
而不是“\$”后,它就可以工作了。谢谢。正确,JS将始终将反斜杠视为转义字符的请求。虽然字符串中不需要转义
$
,但在正则表达式中需要转义,因为
$
对正则表达式有特殊意义(字符串的结尾,或者如果正则表达式设置了
m
标志,则转义为行的结尾)你的最后一条评论太棒了,因为我忽略了一点,
$
在正则表达式中有特殊的含义。现在很清楚了。谢谢。我试过你的建议,但分裂后结果是1个字符串。它应该在分裂后产生3个元素。在我测试时工作正常。我要把全部货到付款