регулярное выражение, чтобы соответствовать точно 5 цифр


testing= testing.match(/(d{5})/g);

Я читаю полный html в переменную. Из переменной нужно выхватить все числа с шаблоном ровно из 5 цифр. Нет необходимости заботиться о том, есть ли до / после этой цифры другой тип слов. Просто хочу убедиться, что то, что это 5-значные числа, было выхвачено.

Однако, когда я применяю его, он не только вытаскивает число с ровно 5 цифрами, число с более чем 5 цифрами также извлекается...

Я пытался поставить ^ впереди и $ позади, но это делает результат равным нулю.

5 24

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 (✓✓)