【问题标题】:how to parse string to int in javascript如何在javascript中将字符串解析为int
【发布时间】:2025-12-26 21:40:17
【问题描述】:

我想从 javascript 中的字符串中获取 int 我如何从

中获取它们

test1、stsfdf233、fdfk323、

有人告诉我从这个字符串中获取整数的方法吗?

这是一个规则,int总是在字符串的后面。

我怎样才能得到最后在我的字符串中的 int

【问题讨论】:

    标签: javascript


    【解决方案1】:
    var s = 'abc123';
    var number = s.match(/\d+$/);
    number = parseInt(number, 10);
    

    第一步是一个简单的正则表达式 - \d+$ 将匹配接近末尾的数字。
    在下一步中,我们在之前匹配的 字符串 上使用parseInt,以获得正确的数字。

    【讨论】:

    • @Chinmayee:“int 总是在字符串后面是一个规则”
    • @elusive:之所以有效,是因为parseInt 的第一步是在输入上调用ToString,在本例中是一个数组,然后是一个字符串。请参阅 ECMA-262 规范中的第 15.1.2.2 节。
    • 我还要注意,在 JavaScript 中 1 == [1]true,甚至 [[[[2]]]] == 2 - JavaScript 也将单元素数组视为元素。我猜 JavaScript 是一门草率的语言 :)
    • @Kobi:“我猜 JavaScript 是一种草率的语言” 我不同意。那里有很多草率的 JavaScript 代码,但语言并不草率。
    • 鉴于 @some 对规范的引用,我不确定这是否是一个糟糕(或草率)的解决方案(除非相关 js 实现中存在一些已知缺陷)。
    【解决方案2】:

    您可以使用regex 通过String#match 提取字符串中的数字,并通过parseInt 将每个数字转换为数字:

    var str, matches, index, num;
    
    str = "test123and456";
    matches = str.match(/\d+/g);
    for (index = 0; index < matches.length; ++index) {
        num = parseInt(matches[index], 10);
        display("Digit series #" + index + " converts to " + num);
    }
    

    Live Example

    如果数字确实只出现在字符串的末尾,或者您只想转换您找到的 first 组数字,您可以稍微简化一下:

    var str, matches, num;
    
    str = "test123";
    matches = str.match(/\d+/);
    if (matches) {
        num = parseInt(matches[0], 10);
        display("Found match, converts to: " + num);
    }
    else {
        display("No digits found");
    }
    

    Live example

    如果您想忽略不在末尾的数字,请将$ 添加到正则表达式的末尾:

    matches = str.match(/\d+$/);
    

    Live example

    【讨论】:

    • 那是/\d+$/。酷if,顺便说一下:)
    • @Kobi: 感谢 捕捉到 $ 的东西,我在示例中捕捉到了它,但没有意识到我在文本中输入了它(我通常 从示例复制到文本,而不是相反)。
    • +1 一个if(matches) 我敢肯定这会比依靠parseInt() 为你做更快的测试。
    【解决方案3】:
    var str = "stsfdf233";
    var num = parseInt(str.replace(/\D/g, ''), 10);
    

    【讨论】:

    • 注意:即使数字不在字符串末尾(也适用于 ab12c34 之类的字符串),此解决方案也有效
    • @fcalderan:是的,但几乎可以肯定不是它应该的方式。 (您的“ab12c34”示例将返回数字 1,234。期望的结果?我对此表示怀疑。)
    【解决方案4】:
    var match = "stsfdf233".match(/\d+$/);
    var result = 0; // default value
    if(match != null) {
        result = parseInt(match[0], 10); 
    }
    

    【讨论】:

      【解决方案5】:

      还有另一种选择,这次没有任何替换或正则表达式,只有一个简单的循环:

      function ExtractInteger(sValue)
      {
          var sDigits = "";
          for (var i = sValue.length - 1; i >= 0; i--)
          {
              var c = sValue.charAt(i);
              if (c < "0" || c > "9")
                  break;
              sDigits = c + sDigits;
          }
          return (sDigits.length > 0) ? parseInt(sDigits, 10) : NaN;
      }
      

      使用示例:

      var s = "stsfdf233";
      var n = ExtractInteger(s);
      alert(n);
      

      【讨论】:

      • 一个小评论 - 你想打电话给parseInt(sDigits, 10),试试abc012,然后abc09
      【解决方案6】:

      这可能对你有帮助

      var str = 'abc123';
      var number = str.match(/\d/g).join("");
      

      【讨论】:

        【解决方案7】:

        使用我对 String 类的扩展:

        String.prototype.toInt=function(){
            return parseInt(this.replace(/\D/g, ''),10);
        }
        

        然后:

        "ddfdsf121iu".toInt();
        

        将返回一个整数:121

        【讨论】:

          【解决方案8】:

          第一个正数或负数:

          "foo-22bar11".match(/-?\d+/); // -22
          

          【讨论】:

          • 你能解释一下你的答案吗?
          • 这是错误的,因为它没有回答但不应该被删除。它具有价值。它找到第一个
          • OP 并没有要求所有的发生,我也不想这样。而且给出的答案都没有考虑到负数,这正是我所需要的,所以我想出了这一点。
          【解决方案9】:
          javascript:alert('stsfdf233'.match(/\d+$/)[0]) 
          

          Global.parseIntradix 在这里是多余的,正则表达式已经提取了十进制数字并正确修剪了字符串

          【讨论】: