регулярное выражение для точного соответствия 5 цифрам - PullRequest
30 голосов
/ 12 февраля 2011
testing= testing.match(/(\d{5})/g);

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

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

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

Ответы [ 5 ]

53 голосов
/ 12 февраля 2011

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

7 голосов
/ 12 февраля 2011

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

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

2 голосов
/ 12 февраля 2011

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

<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>
1 голос
/ 12 февраля 2011

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

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

f 23 23453 234 2344 2534 hallo33333 "50000"

23453, 33333 50000

0 голосов
/ 16 июля 2018

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

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

...