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