регулярное выражение, чтобы соответствовать точно 5 цифр
testing= testing.match(/(d{5})/g);
Я читаю полный html в переменную. Из переменной хочется выхватить все числа с шаблоном ровно из 5 цифр. Нет необходимости заботиться о том, до / после этой цифры, имеющей другой тип слов. Просто хочу убедиться, что это 5 цифр уже достала.
однако, когда я применяю его, он не только вытаскивает номер с ровно 5 цифрами, число с более чем 5 цифрами также извлекается...
Я пытался ставить ^
перед и $
позади, но это делает результат нулевым.
5 ответов
Я читаю текстовый файл и хочу использовать regex ниже, чтобы вытащить числа с ровно 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
. Другие ответы обеспечивают большие regexes если вы требуете последний.
моя тестовая строка для следующего:
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
цикл, иначе вы получите бесконечный цикл.
Это должно работать:
<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 hallo33333"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 (✓✓)