我有一个以“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]);
}
}
我很肯定有一种检查字符串尾随零的好方法,并在零之前检查第一个非零数字。但是,我对循环非常糟糕,我只是无法弄清楚如何。
我非常渴望自己搞清楚,但我需要一个良好的开端。我宁愿详细解释如何做到这一点,而不仅仅是“答案” 如果其他任何事情似乎没有,我很乐意听取改进。
提前致谢!
答案 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]
答案 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
但我认为正则表达式解决方案可能比这个更紧凑。