testing= testing.match(/(\d{5})/g);
我正在将完整的 html 读入变量。从变量中,想要提取出所有正好是 5 位数字的数字。无需关心这个数字之前/之后是否有其他类型的单词。只是想确保抓住任何 5 位数字。
但是,当我应用它时,它不仅提取出恰好是 5 位的号码,还检索到超过 5 位的号码......
我曾尝试放在^
前面和$
后面,但它使结果显示为空。
testing= testing.match(/(\d{5})/g);
我正在将完整的 html 读入变量。从变量中,想要提取出所有正好是 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"]
边界\b
一词在这里是您的朋友。
我的正则表达式会得到一个这样的数字12345
,但不是这样a12345
。如果您需要后者,其他答案提供了很好的正则表达式。
我的测试字符串如下:
testing='12345,abc,123,54321,ab15234,123456,52341';
如果我理解你的问题,你会想要["12345", "54321", "15234", "52341"]
.
如果 JS 引擎支持正则表达式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,否则您将获得无限循环。
这应该有效:
<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>
这是怎么回事?\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 (✓✓)