Javascript substring()从我的字符串返回错误的值?

Javascript substring()从我的字符串返回错误的值?,javascript,Javascript,我有以下代码: var sequence = $stateParams.testId.length == 14 ? parseInt($stateParams.testId.substring(11, 2)) : 0; 我希望序列设置为01(最后两个数字)。但结果是它返回198 有人能解释为什么会这样吗 console.log($stateParams.testId)/“01198-05282-01” console.log(序列)//198 以下是解释: 您的查

我有以下代码:

var sequence = $stateParams.testId.length == 14 ?
               parseInt($stateParams.testId.substring(11, 2)) : 0;
我希望序列设置为01(最后两个数字)。但结果是它返回198

有人能解释为什么会这样吗

console.log($stateParams.testId)/“01198-05282-01”

console.log(序列)//198


以下是解释:

您的查询字符串包含:
“01198-05282-01”

让我们把它放在一个变量中:

var a= "01198-05282-01";
如果我们给它加上子串

a.substring(11,2)
它将返回:

"198-05282"
您的代码中有parseInt,因此

parseInt("198-05282");
会回来的

198
substring()方法返回一个字符串之间的字符串子集 索引和另一个,或通过字符串的结尾

因此,要获得所需的输出,您需要

var a= "01198-05282-01";

console.log(a.substring(12,14))  //returns "01"
使用
parseInt(a.substring(12,14),10)//将返回1

使用您的代码:

var sequence = $stateParams.testId.length == 14 ?
               parseInt($stateParams.testId.substring(12, 14), 10) : 0;
作为

有关子字符串的详细信息:

正如Tushar suggessted使用基数作为第二个参数

函数解析字符串参数并返回指定基数(数学数字系统中的基数)的整数

基数:介于2和36之间的整数,表示上述字符串的基数(数学数字系统中的基数)。 为人类常用的十进制数字系统指定10。 始终指定此参数以消除读卡器混淆并 保证可预测的行为。不同的实现产生不同的结果 未指定基数时的不同结果,通常为默认值 将该值设置为10

使用索引

子字符串的签名是

str.substring(indexStart[,indexEnd])

请注意,第二个参数是索引本身,而不是子字符串的长度

如果
indexStart
大于
indexEnd
,则
substring()
的效果就像两个参数被交换一样;例如,
str.substring(1,0)==str.substring(0,1)

所以

.substring(11,2)
相当于
。substring(11,2)
将给出子字符串
“198-05282-”
,并在其上使用将给出输出为
198

  • 使用第二个参数作为索引,这里是14(12+2)
  • 将基数参数设置为
    parseInt
    as 10以避免意外结果
  • 代码:

    var str = '01198-05282-01';
    
    var sequence = str.length == 14 ?
        parseInt(str.substring(12, 14), 10) : 0;
    //                             ^^   ^^
    
    console.log(sequence);
    
    var str = "01198-05282-01";
    
    var sequence = (str.match(/\d+$/) || [])[0] || 0; // Get the last number, use 0 as default if not present
    sequence = parseInt(sequence, 10);
    

    要使用
    长度获取子字符串,请使用


    substring()
    的问题在中有很好的解释。如果要获取
    -
    之后的最后一个数字,可以使用regex

    /\d+$/
    
    代码:

    var str = '01198-05282-01';
    
    var sequence = str.length == 14 ?
        parseInt(str.substring(12, 14), 10) : 0;
    //                             ^^   ^^
    
    console.log(sequence);
    
    var str = "01198-05282-01";
    
    var sequence = (str.match(/\d+$/) || [])[0] || 0; // Get the last number, use 0 as default if not present
    sequence = parseInt(sequence, 10);
    

    子字符串()有什么问题吗?

    使用
    substring()
    没有错,但它有以下限制

  • 它是静态的-数字
    12
    14
    。还有一件事需要注意
  • 如果在12到14之间的位置有非数字字符,结果将是意外的。然而,当字符串不以数字结尾时,使用正则表达式将给出准确的结果,即零

  • 这与角度有关吗?我使用AngularJS,但它只是一个普通的javascript变量