【问题标题】:How to get last numeric digit from a string in javascript如何从javascript中的字符串中获取最后一个数字
【发布时间】:2019-04-16 11:33:34
【问题描述】:

试图从 javascript 中的字符串中获取最后一个数字。

请注意,我不是要获取字符串上的最后一个字符,而是要获取最后一个 digit 作为 number

例如:

lastDigit("MA01A"); // returns 1
lastDigit("MA01"); // returns 1
lastDigit("1"); // returns 1
lastDigit("1MABC"); // returns 1
lastDigit("MABC"); // returns undefined

我怎样才能得到它?

【问题讨论】:

  • 你对这个字符串操作问题做了哪些研究?我问这个,因为这是一个非常基本的问题,应该已经有解决方案或任何搜索引擎上都有可用的资源
  • const source="MA01"; let char = source[source.length-1]; console.log(char);
  • 不重复..请了解
  • @Xatenev 和其他人,字符串中的最后一个 数字,而不是任何最后一个字符。
  • 在您的示例中,最后一个 number 和最后一个 character 是相同的,是一个输入,其中有一个数字后跟一个或多个字母可能吗?

标签: javascript


【解决方案1】:

这是一个不使用 for 循环的版本。两个版本:一个短的,返回一个字符串,一个稍长的返回一个数字,以防你也需要。

function lastDigit(str) {
  // Remove all non-digits from the string and return the last
  // character
  return str.replace(/[^\d]*/g, '').slice(-1) || undefined;
}

function lastDigitAsNumber(str) {
  // Remove all non-digits from the string
  const digit = str.replace(/[^\d]*/g, '').slice(-1)
  // Parse the last digit as number (this will be 0 for ''
  const number = Number(digit)
  // Return accordingly
  return digit.length > 0 ? number : undefined;
}

console.log(lastDigit("MA01A")); // returns '1'
console.log(lastDigit("MA01")); // returns '1'
console.log(lastDigit("1")); // returns '1'
console.log(lastDigit("1MABC")); // returns '1'
console.log(lastDigit("MABC")); // returns undefined

console.log(lastDigitAsNumber("MA01A")); // returns 1
console.log(lastDigitAsNumber("MA01")); // returns 1
console.log(lastDigitAsNumber("1")); // returns 1
console.log(lastDigitAsNumber("1MABC")); // returns 1
console.log(lastDigitAsNumber("MABC")); // returns undefined

【讨论】:

    【解决方案2】:

    var source = "MA01",
        lastNum = source.match(/(\d+)(?!.*\d)/)[0];
    
    alert(lastNum);

    【讨论】:

    • 尝试在字符串末尾添加一个字母。它抛出一个错误。请参阅我对其他答案的评论,了解我指出这一点的原因。
    • 这会返回1,但只是因为它解析01,如果输入结束12怎么办?
    • 现在你返回01
    【解决方案3】:

    假设字符串的末尾可能有非数字字符,则可以反向遍历字符串并返回遇到的第一个数字,或者(例如)null 否则

    function getLatestDigit(text) {
      for (var i = text.length - 1; i >= 0; i--) {
        if (!isNaN(text.charAt(i))) return text.charAt(i);
      }
      return null;
    }
    
    console.log(getLatestDigit("MA01"));
    console.log(getLatestDigit("MA12aaaaa"));
    console.log(getLatestDigit("NoNumbersHere"));

    【讨论】:

    • 这是 imo 最好的方法,RegEx 解决方案对于这个微不足道的任务来说太过分了。
    【解决方案4】:

    试试这个....

    var source="MA01";
    
    var lastNum = source.replace(/.*?(\d+)[^\d]*$/,'$1')
    
    alert(lastNum);

    【讨论】:

    • 试试“MA01aaaaaaaaaaa”。给定这个例子,你没有错(并且问题对输入不清楚)但是如果我们从字面上理解问题的标题,这实际上是行不通的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2011-07-07
    • 2011-08-17
    相关资源
    最近更新 更多