子串返回相反的结果

时间:2019-09-27 09:48:45

标签: javascript

我正在尝试使用Javascript .substring()仅检索字符串的价格部分。

我知道可以使用Regex做到这一点,但我想使用.substring()解决它。

我为.substring()定义了起始值和结束值,而不是在中间获取值: 5.75 ...我只得到了不需要的字符串部分 US :: Air: USD ,来自字符串“ US :: Air:5.75 USD”

有人可以针对我在这里做错的事情提供一些快速建议吗?

var cat = "US::Air:5.75 USD"
var firstPart = cat.lastIndexOf(":") + 1;
console.log(firstPart);
var secondPart = cat.split(" ")[1];
console.log(secondPart);
var betweenFirstNSecond = cat.substring(firstPart, secondPart);
console.log(betweenFirstNSecond);

预期结果:5.75 控制台日志的实际结果:         11         美元         US :: Air:

3 个答案:

答案 0 :(得分:2)

无需拆分。您应该只获得要获取新字符串的位置和要停止减去的位置:

let str = "US::Air:5.75 USD";
let subStr = str.substring(str.lastIndexOf(':') + 1, str.lastIndexOf(' '));
console.log(subStr);

OR:

let str = "US::Air:5.75 USD";
let startToSubtract = str.lastIndexOf(':') + 1;
let endToSubtract = str.lastIndexOf(' ');
let subStr = str.substring(startToSubtract, endToSubtract);
console.log(subStr);

答案 1 :(得分:0)

  

NaN的任何参数值都视为0。

由于第二部分的值是字符串,因此当您尝试更改其数字时,它将导致NaN

console.log(+"USD")


  

如果indexStart大于indexEnd,则substring()的效果   好像两个参数已被交换;

因此您的代码实际上在执行str.substring(0, lastIndexOf(":") + 1),最终得到的值直到最后:,而您可以使用lastIndexOf空格字符或任何分隔符

var cat = "US::Air:5.75 USD";
var firstPart = cat.lastIndexOf(":") + 1;
var secondPart = cat.indexOf(" ");
var firstMinusSecond = cat.substring(firstPart, secondPart);
console.log(firstMinusSecond);

答案 2 :(得分:0)

  1. 如果substring()方法的值为NaN,则将其视为0。
  2. 如果开始索引为,则substring()方法交换其两个参数 大于结束索引。

在您的代码中,起始索引为8,终止索引为“ USD”,即NaN。 因此,子字符串方法将结束索引视为0。 现在,由于开始索引8大于结束索引0,所以交换了两个参数。 这最终导致方法子字符串(0,8)产生美元US :: Air:

请参考MDN文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring