JavaScript中的字符串分割错误

时间:2018-10-18 12:52:26

标签: javascript split

我正在尝试根据除斜符\$拆分字符串。我已经尝试了失败。

我拥有的代码位于https://js.do/sun21170/77657,也粘贴在下面。

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

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(/\$/);
    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];
    }
}
<button onclick="splitString();return false;">Split a tricky string</button>

<h4>Tricky string</h4>
<div id="div0" style="color:green">sd sewq wee r r ttttt $300 rrtrt utu iwiwi \$500 kjgf ihj \$215 ghi</div>

<h4>Split using \$ as delimiter</h4>
<div id="div1" style="color:red"></div>

<h4>Split using $ as delimiter</h4>
<div id="div2"  style="color:blue"></div>

2 个答案:

答案 0 :(得分:5)

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

您应使用的正则表达式为/\\\$/。如regex101.com

所示
\\ matches the character \ literally (case sensitive)
\$ matches the character $ literally (case sensitive)

enter image description here

您在字符串中也遇到了类似的问题,即您将\$放在了字符串中,这被视为字面上使用字符$的请求。如果您执行console.log(trickyString);,可以看出这一点,您会注意到\不在输出中。您需要双引号:

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

答案 1 :(得分:3)

问题在于,斜线在JS字符串和RegEx中都有特殊含义。

这里有两个关键部分:

h

应该是:

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(/\$/);

由于var array1 = trickyString.split(/\\\$/g); 将被解释为\$,因此第一个$\\本身具有特殊含义,因此第二个{{1} }。

这是我使用的代码:

$

这些是结果:

\$