Devo estrarre una parte specifica della stringa Javascript. Stavo pensando di farlo con regex, ma non riuscivo a trovarne uno che lo facesse correttamente.
La stringa può avere una lunghezza variabile e può contenere tutti i caratteri possibili in tutte le combinazioni possibili.
Quello che devo estrarre da esso, sono 10 caratteri adiacenti, che corrispondono a una delle prossime due possibili combinazioni:
- 9 numeri e 1 lettera "X" (lettera maiuscola "X", non X come lettera variabile!)
- 10 numeri
Quindi, se la stringa di input è questa: "[1X,!? X22; 87654321X9] ddee", dovrebbe restituire solo "87654321X9".
Spero di averlo spiegato abbastanza bene. Grazie in anticipo!
risposte:
3 per risposta № 1Questo Regex funzionerà:
d{9}X|d{8}Xd|d{7}Xd{2}|d{6}Xd{3}|d{5}Xd{4}|d{4}Xd{5}|d{3}Xd{6}|d{2}Xd{7}|d{1}Xd{8}|d{10}|Xd{9}
Come descritto, deve corrispondere a 9 cifre e qualsiasi lettera e la lettera può trovarsi in qualsiasi posizione della sequenza.
d{9}X # will match 9 digits and a letter in the end
d{8}Xd # will match 8 digits a lettter then a digit again
...
d{1}Xd{8} # will match 1 digits a lettter then 8 digits
{10} # will match 10 digits
Modificato per abbinare solo X
2 per risposta № 2
Puoi usare questa regex molto più semplice:
/(?!d*Xd*X)[dX]{10}/
Distacco RegEx:
(?!d*Xd*X) # negative lookahead to fail the match if there are 2 X ahead
[dX]{10} # match a digit or X 10 times
Da più di uno X
non è consentito a causa dell'utilizzo di lookahead negativo, questa regex consentirà solo 10 cifre o ekse 9 cifre e una singola X
.
Questa regex presenta alcuni vantaggi rispetto all'altra risposta:
- Regex molto più semplice che è più facile da leggere e mantenere
- Prende meno di mezzo passo per completare, il che può essere una differenza sostanziale su un testo più grande.