регулярное выражение, чтобы соответствовать точно 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"]

jsFiddle.

слово граница \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 (✓✓)