Javascript Regex-比较最后2个字符

我有一个像这样的字符串(电话号码):

0223216582

我想检查最后两对数字(65和82)是否不等于

实际上,我的正则表达式如果相等则返回true,但这不是我真正需要的:

console.log(/^02.*(\d{2})\1$/.test('0223216582')); // false
console.log(/^02.*(\d{2})\1$/.test('0223216565')); // true

我需要这样的东西:

console.log(/<regex>/.test('0223216582')); // true
console.log(/<regex>/.test('0223216565')); // false

编辑

我将在MongoDB请求中使用此Regex,如下所示:

this.findOne({
    used: {$eq: false},number: {$regex: /^02.*(\d{2})\1$/}
});

有人可以帮助我吗?

谢谢。

wangyi19890218 回答:Javascript Regex-比较最后2个字符

您可以在负前瞻的情况下使用此正则表达式:

^02.*(\d{2})(?!\1$)\d{2}$

RegEx Demo

仅当后两位数字不等于前两位数字时,才会返回匹配项。

RegEx详细信息:

  • ^:开始
  • 02:匹配数字02
  • .*:匹配0个或更多字符
  • (\d{2}):匹配2位数字并将其捕获在#1组中
  • (?!\1$):要断言的否定超前条件比后2位数字要不同于捕获组#1中的
  • \d{2}:匹配后两位数字
  • $:结束
,

我真的看不到这里需要正则表达式。您可以简单地得到两个数字的最后两位数字,然后使用普通的字符串比较进行比较:

function comparePhone(ph1,ph2) {
    return ph1.splice(-2) !== ph2.splice(-2);
}

在这里,拼接函数返回原始的子字符串。在我们的例子中,我们选择的是最后两个字符(-2)

,

我会在这里使用算术:

var number = 223212255;
if ( (Math.floor(number / 1000) % 10 == Math.floor(number / 100) % 10) &&
     (Math.floor(number / 10) % 10 == number % 10 )) {
    console.log("MATCH");
}
else {
    console.log("NO MATCH");
}

此解决方案可能比基于正则表达式的解决方案性能更高。

本文链接:https://www.f2er.com/3151297.html

大家都在问