正则表达式恰好匹配5位数

时间:2011-02-12 01:13:02

标签: javascript regex match digit

testing= testing.match(/(\d{5})/g);

我正在读一个完整的HTML变量。从变量中,想要获取具有正好5位数的模式的所有数字。无需关心此数字之前/之后是否有其他类型的单词。只是想确保抓取的是5位数字。

但是,当我应用它时,它不仅会拔出5位数的数字,还会检索超过5位的数字......

我曾尝试将^放在前面,$放在后面,但它会将结果显示为null。

5 个答案:

答案 0 :(得分:52)

  

我正在阅读一个文本文件,想要使用下面的正则表达式来提取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。如果你需要后者,其他答案提供了很好的正则表达式。

答案 1 :(得分:7)

我的测试字符串如下:

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,您似乎需要在while循环中使用RegExp stored in a variable而不是文字正则表达式,否则您将获得无限循环。

答案 2 :(得分:2)

这应该有效:

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

答案 3 :(得分:1)

这是什么意思? \D(\d{5})\D

这将在:

f 23 23453 234 2344 2534 hallo33333“50000”

23453,333333 50000

答案 4 :(得分:0)

  

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

要仅匹配字符串中任意位置的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(✓✓)