Подтвердить что ты не робот

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

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

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

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

Я попытался поставить ^ впереди и $ позади, но результат его получается как null.

4b9b3361

Ответ 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] ...
        } 
    }

Вот несколько быстрых результатов.

  • abc12345xyz (✓)

  • 12345abcd (✓)

  • abcd12345 (✓)

  • 0000aaaa2 (✖)

  • a1234a5 (✖)

  • 12345 (✓)

  • <space> 12345 <space> 12345 (✓ ✓)