检查字符串中特定位置是否存在数字

时间:2014-03-21 19:34:14

标签: javascript

我有一个以“TT”开头并以六位数结尾的字符串(例如“TT012345”,“TT012000,TT329001)。字符串总是这样格式化,我需要检查此字符串中的最后一位数字具有一定的价值。

说我有字符串“TT032970”。在这种情况下,我想在这个字符串上得到一个匹配,因为最后一个数字是零,之前的数字是七(我正在寻找7)。 字符串“TT037000”也应该匹配,但“TT0329701”不应该(因为它不是七个右边的全部零(字符串中的“最后一个”7))。

我正在考虑使用一组嵌套的if使用substr()来检查字符串的所有位置为零,如果它在位置n不是零,那么我检查我正在寻找的数字是否存在在位置n。
我的代码是重复的,我只是为了提高效率。

这是我到目前为止所做的(可行但只检查字符串的最后一个位置和第二个位置):

var lastDigit = [3, 7, 8], tda = document.querySelectorAll('td a'), i, j;

function checkArray(num) {
    "use strict";

    for (j = 0; j < lastDigit.length; j++) {
        if (num === lastDigit[j]) {
            return true;
        }
    }
}

for (i = 0; i < tda.length; i++) {


    if ((parseInt(tda[i].textContent.substr(8, 1), 10) === 0 && checkArray(parseInt(tda[i].textContent.substr(7, 1), 10))) || checkArray(parseInt(tda[i].textContent.substr(8, 1), 10))) {
        tda[i].style.background = "rgb(255, 144, 255)";
        amountOfTickets.push(tda[i]);
    }
}

我很肯定有一种检查字符串尾随零的好方法,并在零之前检查第一个非零数字。但是,我对循环非常糟糕,我只是无法弄清楚如何。

我非常渴望自己搞清楚,但我需要一个良好的开端。我宁愿详细解释如何做到这一点,而不仅仅是“答案” 如果其他任何事情似乎没有,我很乐意听取改进。

提前致谢!

3 个答案:

答案 0 :(得分:3)

要获取字符串末尾的零前的第一个数字,您可以使用正则表达式:

+string.match(/(\d)0*$/)[1]

示例1:

var string = "TT032970";
var digit = +string.match(/(\d)0*$/)[1];
console.log(digit); // logs 7

示例2:

console.log(["TT012345","TT012000","TT329001","TT032970"].map(function(string){
   return +string.match(/(\d)0*$/)[1]
})); // logs [5, 2, 1, 7] 

Demonstration

答案 1 :(得分:1)

显然,从其他答案来看,正则表达式将比循环简单得多。此外,任何嵌套循环解决方案都难以工作,因为您不知道要看多少级别。 (有一个零吗?两个?五个?)

这个正则表达式非常简单:

/(\d)0+$/

如果你使用字符串对match进行了null,如果它不匹配(例如&#34; TT0329701&#34;)或两者,则应该["7000", "7"]。如果是元素数组(例如&#34; TT037000&#34;将返回{{1}}。)

这应该足以让您构建自己的解决方案。

祝你好运。

答案 2 :(得分:0)

我要做的第一件事就是这样(取决于我是否正确理解你的问题):

function lookFor(str, digit) {
    //validate input...
    if (str.length != 8) return false;
    if (str[0] != "T" && str[1] != "T") return false;

    //start at the end and move to the left as long as there are zeros
    //the first non-zero element must be our digit, else return false
    for (var i = str.length-1; i>0; --i) {
        if (str[i] !== "0") {
            return str[i] === digit;
        }
    }
}

lookFor("TT012000", "2") --> true
lookFor("TT012000", "3") --> false

但我认为正则表达式解决方案可能比这个更紧凑。