gpt4 book ai didi

javascript - 正则表达式量词匹配较短的序列

转载 作者:行者123 更新时间:2023-11-28 14:18:04 24 4
gpt4 key购买 nike

我正在测试一个简化的正则表达式来识别可能的信用卡号,以便我们可以将它们过滤掉。我正在寻找 13-16 位数字,每个数字后面可以有任意数量的空格和“-”,并且整个序列由单词边界包围。

看起来这个正则表达式应该可以解决问题(选项 1):\b(?:\d[ -]*?){13,16}\b

但是当我使用测试字符串测试这个(在我的代码(在 JavaScript 中)和 regex101.com 中)时1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 它仅匹配 1 2 3 4 5 6 7 8 9 0 1 2 3,即最短我的 {13,16} 量词中的数字。我读到的所有内容都表明它应该匹配最长的可能序列,但显然事实并非如此。

如果我将正则表达式更改为 \b(?:\d[ -]*?){16}\b 它会匹配所有 16 位数字(但当然不匹配 13- 15 位数字)。

我可以通过首先使用最长序列的交替来解决这个问题,如下所示(选项 2):

\b(?:\d[ -]*?){16}|(?:\d[ -]*?){15}|(?:\d[ -]*?){14}|(?:\d[ -]*?){13}\b

或者,如果我在第一次匹配 {12,15} 后显式添加另一个组到末尾,则它会起作用,如下所示(选项 3):

\b(?:\d[ -]*?){12,15}(?:\d[ -]*?)\b

如果其中之一是唯一的方法,我可以接受它,但它们都比更紧凑的选项 1 更难看,而且我还想了解为什么选项 1 不起作用我以为会的。就此而言,为什么选项 3 在匹配的项目数量方面似乎表现不同?它匹配 15 位数字而不是 12 位。

最佳答案

只需删除惰性量词:

\b(?:\d[ -]*){13,16}\b

Demo

关于javascript - 正则表达式量词匹配较短的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56583818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com