【发布时间】:2019-12-19 04:42:22
【问题描述】:
我正在尝试查找以相同数字开头和结尾并且在两个数字之间具有相似数字的数字。下面是一些例子:
7007 1551 3993 5115 9889
我尝试了以下正则表达式来识别第一个和最后一个数字。但是,没有选择任何号码。
^(\d{1})\1$
感谢您的帮助。
【问题讨论】:
我正在尝试查找以相同数字开头和结尾并且在两个数字之间具有相似数字的数字。下面是一些例子:
7007 1551 3993 5115 9889
我尝试了以下正则表达式来识别第一个和最后一个数字。但是,没有选择任何号码。
^(\d{1})\1$
感谢您的帮助。
【问题讨论】:
【讨论】:
\b(\d)(\d)\2+\1\b。
也许,
^(\d)(\d)\2+\1$
可能是一个选择。
如果您希望简化/更新/探索表达式,已在regex101.com 的右上角面板中进行了说明。如果您有兴趣,可以在this debugger link 中观看匹配步骤或修改它们。调试器演示了a RegEx engine 如何逐步消耗一些示例输入字符串并执行匹配过程。
【讨论】:
您的正则表达式将匹配两位数字相同的数字。你只需要扩展它:(\d)(\d)\2\1
此外,由于数字位于同一行,因此请使用字边界 (\b) 而不是行边界(^ 和 $)。
\b(\d)(\d)\2\1\b
顺便说一句,{1} 是多余的
【讨论】:
简单的JS方式。
let a = "7007 1551 3393 5115 9883";
a = a.split(" ");
let ans = [];
a.forEach((val) => {
let temp = val.split("");
if (temp && temp[0] === temp[temp.length - 1]) {
temp = temp.slice(1,temp.length-1);
ans.push(temp.slice(0,temp.length).every( (val, i, arr) => val === arr[0] )) ;
} else {
ans.push(false);
}
});
console.log(ans);
正则表达式:
let a = "7007 1551 3393 5115 9883";
a = a.split(" ");
let ans = [];
a.forEach((val) => {
let reg = /(\d)(\d*)(\d)/gi;
let match = reg.exec(val);
if (match && match.length > 3 && match[1] === match[3]) {
let temp = match[2];
temp = temp.split("");
temp = temp.slice(0,temp.length);
ans.push(temp.every( (val, i, arr) => val === arr[0] )) ;
} else {
ans.push(false);
}
});
console.log(ans);
【讨论】: