2013-01-22 10 views
5

E 'possibile da questa:Rimuovere virgola dal gruppo regex

US Patent 6.570.557

recuperare 3 gruppi che sono:

  1. USA
  2. brevetto
  3. 6.570.557 (senza virgole)

S o lontano ho ottenuto:

(US)(\s{1}Patent\s{1})(\d{1},\d{3},\d{3}) 

e stava cercando (?!,) per sbarazzarsi delle virgole poi ho effettivamente sbarazzarsi del numero intero.

+0

Perché non recuperare semplicemente il numero con le virgole e quindi rimuovere le virgole quando è necessario? '/ (US) (\ sPatent \ s) ([\ d,] *) /' Lazy ftw! – kojiro

+0

Ho dimenticato di dire che non riesco a cambiare il JS Stavo cercando di raggiungere questo risultato solo in regex – ricardoespsanto

+0

L'espressione regolare non è nel JS? – kojiro

risposta

0

Non è possibile ignorare le virgole durante la corrispondenza, a meno che non si corrisponda al numero come tre parti separate e quindi unirle insieme.

Sarebbe molto preferibile rimuovere i delimitatori dal numero dei risultati corrispondenti con String.replace.

9

Prova con:

var input = 'US Patent 6,570,557', 
    matches = input.match(/^(\w+) (\w+) ([\d,]+)/), 

    code = matches[1], 
    name = matches[2], 
    numb = matches[3].replace(/,/g,''); 
+0

Djien dobry, +1 per pulito e compatto. Ultimamente ho notato il tuo ottimo lavoro nel tag regex ma sembra che tu ci lavori da molto tempo. :) – zx81

0

basta aggiungere più gruppi in questo modo:

(US)(\s{1}Patent\s{1})(\d{1}),(\d{3}),(\d{3}) 

E poi concatenare gli ultimi 3 gruppi

+0

Ovviamente l'OP non è sicuro che il numero di brevetto sia tra "1.000.000" e "9.999.999". –

2

Invece di usare espressioni regolari, è possibile farlo con 2 semplici funzioni:

var str = "US Patent 6,570,557"; // Your input 
var array = str.split(" "); // Separating each word 
array[2] = array[2].replace(",", ""); // Removing commas 
return array; // The output 

Anche questo dovrebbe essere più veloce.