it-swarm-ru.tech

регулярное выражение для точного соответствия 5 цифрам

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

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

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

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

26
i need help

Я читаю текстовый файл и хочу использовать регулярное выражение ниже, чтобы вытащить числа с ровно 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, но not, как a12345. Другие ответы дают большие регулярные выражения, если вам требуется последнее.

48
alex

Моя тестовая строка для следующего:

testing='12345,abc,123,54321,ab15234,123456,52341';

Если я понимаю ваш вопрос, вы бы хотели ["12345", "54321", "15234", "52341"].

Если JS-движки поддерживают регулярные выражения, вы можете сделать:

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, иначе вы получите бесконечный цикл.

6
outis

Это должно работать:

<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>
2
Mark Eirich

что по этому поводу? \D(\d{5})\D

Это будет делать на:

f 23 23453 234 2344 2534 hallo33333 "50000"

23453, 33333 50000

1
Luke

Не нужно заботиться о том, есть ли до/после этой цифры слова другого типа

Чтобы просто соответствовать шаблону из 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 (✓ ✓)

0
Muhammad Saqib