Domanda

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

Sto leggendo un HTML completo in variabile. Dalla variabile, vuoi afferrare tutti i numeri con il modello di esattamente 5 cifre. Non c'è bisogno di preoccuparsi se prima/dopo questa cifra abbia altri tipi di parole. Voglio solo assicurarmi che qualunque cosa sia 5 cifre sia stata presa.

Tuttavia, quando lo applico, non solo tira fuori il numero con esattamente 5 cifre, numero con più di 5 cifre recuperati ...

Avevo provato a mettere ^ davanti e $ Dietro, ma rende il risultato NULL.

È stato utile?

Soluzione

Sto leggendo un file di testo e voglio usare Regex di seguito per estrarre numeri con esattamente 5 cifre, ignorando gli alfabeti.

Prova questo...

var str = 'f 34 545 323 12345 54321 123456',
    matches = str.match(/\b\d{5}\b/g);

console.log(matches); // ["12345", "54321"]

jsfiddle.

La parola confine \b è il tuo amico qui.

Aggiornare

Il mio regex otterrà un numero come questo 12345, ma non piace a12345. Le altre risposte forniscono grandi regex se hai bisogno di quest'ultimo.

Altri suggerimenti

La mia stringa di test per quanto segue:

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

Se capisco la tua domanda, lo vorresti ["12345", "54321", "15234", "52341"].

Se i motori JS supportassero Regexp LookbeHinds, potresti fare:

testing.match(/(?<!\d)\d{5}(?!\d)/g)

Dal momento che non è attualmente, potresti:

testing.match(/(?:^|\D)(\d{5})(?!\d)/g)

e rimuovere le principali non cifre dai risultati appropriati o:

pentadigit=/(?:^|\D)(\d{5})(?!\d)/g;
result = [];
while (( match = pentadigit.exec(testing) )) {
    result.push(match[1]);
}

Nota che per IE, sembra che tu debba usare un Regexp memorizzato in una variabile piuttosto che un regexp letterale nel while Loop, altrimenti otterrai un ciclo infinito.

Questo dovrebbe funzionare:

<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>

Cosa ne riguarda questo? \D(\d{5})\D

Questo farà su:

F 23 23453 234 2344 2534 Hallo33333 "50000"

23453, 33333 50000

Non c'è bisogno di preoccuparsi se prima/dopo questa cifra abbia altri tipi di parole

Per abbinare semplicemente il modello del numero di 5 cifre ovunque nella stringa, indipendentemente dal fatto che sia separato dallo spazio o meno, usa questa espressione regolare (?<!\d)\d{5}(?!\d).

Esempio di codici 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] ...
        } 
    }

Ecco alcuni risultati rapidi.

  • ABC12345XYZ (✓)

  • 12345ABCD (✓)

  • ABCD12345 (✓)

  • 0000AAA2 (✖)

  • A1234A5 (✖)

  • 12345 (✓)

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top