Регулярное выражение для соответствия точно 5 цифрам
testing= testing.match(/(\d{5})/g);
Я читаю полный html в переменной. Из переменной нужно выхватить все числа с рисунком ровно 5 цифр. Не нужно заботиться о том, есть ли перед/после этой цифры другие слова. Просто хочу удостовериться, что все, что есть 5-значное число, было снято.
Однако, когда я его применяю, он не только вытаскивает номер с точностью до 5 цифр, но и получает более 5 цифр...
Я попытался поставить ^
впереди и $
позади, но результат его получается как null.
Ответы
Ответ 1
Я читаю текстовый файл и хочу использовать регулярное выражение ниже, чтобы вывести цифры с точностью до 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
является вашим другом здесь.
Update
Мое регулярное выражение получит число, подобное этому 12345
, но не похожее на a12345
. Другие ответы предоставляют большие регулярные выражения, если вы нуждаетесь в последнем.
Ответ 2
Моя тестовая строка для следующего:
testing='12345,abc,123,54321,ab15234,123456,52341';
Если я понимаю твой вопрос, ты захочешь ["12345", "54321", "15234", "52341"]
.
Если движки JS поддерживают регулярные выражения "lookbehind", вы можете сделать следующее:
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
, иначе вы получите бесконечный цикл.
Ответ 3
Это должно работать:
<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>
Ответ 4
что это? \D(\d{5})\D
Это будет сделано:
f 23 23453 234 2344 2534 hallo33333 "50000"
23453, 33333 50000
Ответ 5
Не нужно заботиться о том, чтобы до/после этой цифры были слова другого типа
Чтобы просто соответствовать шаблону из 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] ...
}
}
Вот несколько быстрых результатов.