正则表达式精确匹配 5 位数字

IT技术 javascript regex match digit
2021-01-25 02:36:10
testing= testing.match(/(\d{5})/g);

我正在将完整的 html 读入变量。从变量中,想要抓取所有具有 5 位数字模式的数字。无需关心此数字之前/之后是否有其他类型的单词。只是想确保任何 5 位数字都被抓取了。

但是,当我应用它时,它不仅提取出正好是 5 位数字的数字,还检索了超过 5 位数字的数字......

我曾尝试^在前后放置$,但它使结果显示为空。

5个回答

我正在阅读一个文本文件,并想使用下面的正则表达式来提取 5 位数字,忽略字母。

试试这个...

var str = 'f 34 545 323 12345 54321 123456',
    matches = str.match(/\b\d{5}\b/g);

console.log(matches); // ["12345", "54321"]

js小提琴

边界这个词\b是你的朋友。

更新

我的正则表达式会得到这样的数字12345,但不会a12345. 如果您需要后者,其他答案提供了很好的正则表达式。

@Joel Etherton 是的,这是一个仓促的答案并且不正确。希望这个新的没问题:)
2021-03-19 02:36:10
@alex - 我的评论是在你拥有它时发表的str.match(/\d{5}/g);,它确实与它相符。
2021-03-21 02:36:10
这不适用于 34_545_323_12345_54321_123456 :( 想不通
2021-04-02 02:36:10
@alex - +1 现在你有单词边界。:)
2021-04-03 02:36:10
@Joel Etherton 刚试过,结果不匹配。我可能遗漏了一些东西,请为我详细说明:)
2021-04-14 02:36:10

我的测试字符串如下:

testing='12345,abc,123,54321,ab15234,123456,52341';

如果我理解你的问题,你会想要["12345", "54321", "15234", "52341"].

如果 JS 引擎支持 regexp lookbehinds,你可以这样做:

testing.match(/(?<!\d)\d{5}(?!\d)/g)

由于目前没有,您可以:

testing.match(/(?:^|\D)(\d{5})(?!\d)/g)

并从适当的结果中删除前导非数字,或:

pentadigit=/(?:^|\D)(\d{5})(?!\d)/g;
result = [];
while (( match = pentadigit.exec(testing) )) {
    result.push(match[1]);
}

请注意,对于 IE,似乎您需要使用存储在变量中RegExp而不是while循环中的文字 regexp ,否则您将获得无限循环。

那里的结果很好,+1。
2021-03-20 02:36:10

这应该有效:

<script type="text/javascript">
var testing='this is d23553 test 32533\n31203 not 333';
var r = new RegExp(/(?:^|[^\d])(\d{5})(?:$|[^\d])/mg);
var matches = [];
while ((match = r.exec(testing))) matches.push(match[1]);
alert('Found: '+matches.join(', '));
</script>
.. 如果 OP确实想匹配d23553我的正则表达式就很不够用了!:P
2021-03-21 02:36:10
虽然不清楚他要不要匹配d23553中的23553…… 模棱两可的问题好烦啊!
2021-03-28 02:36:10

这是怎么回事? \D(\d{5})\D

这将用于:

f 23 23453 234 2344 2534 halo33333 “50000”

23453、33333 50000

无需关心此数字之前/之后是否有其他类型的单词

要匹配字符串中任意位置的 5 位数字的模式,无论是否以空格分隔,都可以使用此正则表达式(?<!\d)\d{5}(?!\d)

示例 JavaScript 代码:

var regexp = new RegExp(/(?<!\d)\d{5}(?!\d)/g); 
    var matches = yourstring.match(regexp);
    if (matches && matches.length > 0) {
        for (var i = 0, len = matches.length; i < len; i++) {
            // ... ydo something with matches[i] ...
        } 
    }

这是一些快速的结果。

  • abc12345xyz (✓)

  • 12345abcd (✓)

  • abcd12345 (✓)

  • 0000aaaa2 (✖)

  • a1234a5 (✖)

  • 12345 (✓)

  • <space>12345 <space>12345 (✓✓)