2013-01-22 15 views
5

Czy to możliwe, z tego:Usuń przecinek z grupy regex

US Patent 6,570,557

odzyskać 3 grupy są:

  1. USA
  2. Patent
  3. 6570557 (bez przecinków)

S O ile mam:

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

i próbował (?!,) aby pozbyć się przecinków potem skutecznie pozbyć się całego numeru.

+0

Dlaczego nie po prostu pobrać numer przecinkami, a następnie usunąć przecinki, kiedy trzeba? '/ (US) (\ sPatent \ s) ([\ d,] *) /' Lazy ftw! – kojiro

+0

Zapomniałem powiedzieć, że nie mogę zmienić JS, który próbowałem osiągnąć w regex tylko – ricardoespsanto

+0

Regex nie jest w JS? – kojiro

Odpowiedz

0

Nie możesz ignorować przecinków podczas dopasowywania, chyba że dopasujesz liczbę jako trzy oddzielne części, a następnie połączysz je ze sobą.

Byłoby znacznie lepiej zdjąć ograniczniki z liczby z pasujących wyników z String.replace.

9

spróbuj:

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 za czysty i kompaktowy. Ostatnio zauważyłem twoją świetną pracę w tagu regex, ale wygląda na to, że pracujesz tam od dłuższego czasu. :) – zx81

0

Wystarczy dodać więcej grup tak:

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

A potem złączyć ciągu ostatnich 3 grup

+0

Oczywiście OP nie jest pewien, że patent # wynosi od "1 000 000" do "9 999 999". –

2

Zamiast wyrażenia regularnego, można to zrobić z 2 proste funkcje:

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 

To powinno być również szybsze.

Powiązane problemy