我正在尝试根据除斜符\$
拆分字符串。我已经尝试了失败。
我拥有的代码位于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>
答案 0 :(得分:5)
您的问题源于以下事实:在您的正则表达式/\$/
中,\$
被解释为要求将$
视为文字字符。
您应使用的正则表达式为/\\\$/
。如regex101.com
\\ matches the character \ literally (case sensitive)
\$ matches the character $ literally (case sensitive)
您在字符串中也遇到了类似的问题,即您将\$
放在了字符串中,这被视为字面上使用字符$
的请求。如果您执行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} }。
这是我使用的代码:
$
这些是结果:
\$