Javascript正则表达式-比较最后2对字符

4
我有一个像这样的字符串(电话号码):
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请求中使用这个正则表达式,像这样:

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

有人可以帮我吗?

谢谢。


为什么不直接反转正则表达式的结果呢?console.log(!(/^02.*(\d{2})\1$/.test('0223216582')));console.log(!(/^02.*(\d{2})\1$/.test('0223216565')));应该可以完全满足你的需求。 - Dennis Richter
这个正则表达式用于过滤MongoDB请求,请查看我的编辑^^ - Sparw
2
啊,这就解释了为什么你不在这里使用JS的字符串方法。在这种情况下,您应该看看anubhava的非常有前途的解决方案。如果它有效,请别忘记将他的答案标记为接受的答案 ;) - Dennis Richter
3个回答

4
你可以使用带有负向先行断言的正则表达式来实现这个功能:
^02.*(\d{2})(?!\1$)\d{2}$

正则表达式演示

只有在最后两个数字不等于前两个数字时才返回匹配结果。

正则表达式详细信息:

  • ^:开始
  • 02:匹配数字02
  • .*:匹配0个或多个字符
  • (\d{2}):匹配2个数字并在第1组中捕获它们
  • (?!\1$):负向先行断言条件,断言以下两个数字与捕获组#1中的数字不相同
  • \d{2}:匹配最后2个数字
  • $:结束

1
正是我所需要的!非常感谢:D - Sparw

1
我并不认为这里需要正则表达式。你可以简单地获取两个数字的最后两位,并使用普通的字符串比较进行比较:
function comparePhone(ph1, ph2) {
    return ph1.splice(-2) !== ph2.splice(-2);
}

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

这个正则表达式用于过滤MongoDB请求,我不能只获取所有数据并使用类似这样的条件进行过滤:/ - Sparw
2
我明白了,我仍然会在这里留下我的答案,但强烈推荐您使用anubhava的答案 - Nicolas
1
你还应该编辑你的问题,以反映出你需要过滤mongoDB查询的事实,这将更相关于遇到相同问题的人。@Sparw - Nicolas

0
我会在这里使用算术:

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");
}

这个解决方案可能比基于正则表达式的解决方案更高效。


这个正则表达式用于过滤MongoDB请求,请检查我的编辑^^ - Sparw
那会如何改变你的问题? - Tim Biegeleisen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接