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

9avjhtql  于 2021-09-13  发布在  Java
关注(0)|答案(5)|浏览(809)
testing= testing.match(/(\d{5})/g);

我正在将完整的html读入变量。从变量中,我们想找出所有模式正好为5位的数字。无需关心此数字之前/之后是否有其他类型的单词。我只是想确保5位数的数字都被抓出来了。
然而,当我应用它时,它不仅提取出正好5位的数字,而且还检索到超过5位的数字。。。
我试着把 ^ 前后 $ 后面,但它使结果显示为空。

bprjcwpo

bprjcwpo1#

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

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

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

jsfiddle。
单词边界 \b 他是你的朋友。

更新

我的正则表达式会得到这样的数字 12345 ,但不像 a12345 . 如果您需要后一种方法,其他的方法可以提供很好的正则表达式。

fdx2calv

fdx2calv2#

我的以下测试字符串:

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 循环,否则将得到一个无限循环。

e7arh2l6

e7arh2l63#

这应该起作用:

<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>
brqmpdu1

brqmpdu14#

这是怎么回事? \D(\d{5})\D 这将适用于:
f 23 23453 234 2344 2534问候33333“50000”
23453, 33333 50000

bhmjp9jg

bhmjp9jg5#

无需关心此数字之前/之后是否有其他类型的单词
要仅匹配字符串中任意位置的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] ...
        } 
    }

这里有一些快速的结果。
12345xyz(✓)
12345d(✓)
d12345(✓)
0000aaaa2(✖)
a1234a5(✖)
12345 (✓) <space> 12345 <space> 12345 (✓✓)

相关问题