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

i n*_*elp 30 javascript regex match digit

testing= testing.match(/(\d{5})/g);
Run Code Online (Sandbox Code Playgroud)

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

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

我曾尝试^过前后$,但结果却是空的.

ale*_*lex 53

我正在阅读一个文本文件,并希望使用下面的正则表达式来输出正好5位数的数字,忽略字母表.

试试这个...

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

console.log(matches); // ["12345", "54321"]
Run Code Online (Sandbox Code Playgroud)

jsFiddle.

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

更新

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


out*_*tis 7

我的测试字符串如下:

testing='12345,abc,123,54321,ab15234,123456,52341';
Run Code Online (Sandbox Code Playgroud)

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

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

testing.match(/(?<!\d)\d{5}(?!\d)/g)
Run Code Online (Sandbox Code Playgroud)

由于目前没有,您可以:

testing.match(/(?:^|\D)(\d{5})(?!\d)/g)
Run Code Online (Sandbox Code Playgroud)

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

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

请注意,对于IE,似乎您需要在循环中使用存储在变量而不是文字正则表达式中的RegExpwhile,否则您将获得无限循环.