2013-01-22 49 views
5

Có thể từ này:Di chuyển dấu phẩy từ nhóm regex

US Patent 6.570.557

lấy 3 nhóm là:

  1. Mỹ
  2. sáng chế
  3. 6.570.557 (không có dấu phẩy)

S o xa tôi nhận:

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

và đã cố gắng (?!,) để thoát khỏi các dấu phẩy sau đó tôi có hiệu quả để loại bỏ các số nguyên.

+0

Tại sao không chỉ truy xuất số bằng dấu phẩy và sau đó bỏ dấu phẩy khi bạn cần? '/ (US) (\ sPatent \ s) ([\ d,] *) /' Lazy ftw! – kojiro

+0

Tôi quên nói rằng tôi không thể thay đổi JS Tôi đã cố gắng để đạt được điều này trong regex chỉ – ricardoespsanto

+0

regex không phải là trong JS? – kojiro

Trả lời

0

Bạn không thể bỏ qua dấu phẩy khi đối sánh, trừ khi bạn khớp số đó làm ba phần riêng biệt và sau đó ghép chúng lại với nhau.

Sẽ thích hợp hơn nếu tách các dấu phân cách khỏi số từ kết quả phù hợp với String.replace.

9

Hãy thử với:

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 cho sạch và nhỏ gọn. Tôi đã nhận thấy công việc tốt của bạn trong thẻ regex gần đây nhưng có vẻ bạn đã làm việc ở đó trong một thời gian dài. :) – zx81

0

Chỉ cần thêm nhóm giống như vậy:

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

Và rồi nối 3 nhóm cuối cùng

+0

Tất nhiên OP không chắc chắn rằng Patent # nằm trong khoảng từ '1.000.000' đến' 9,999,999'. –

2

Thay vì sử dụng regex, bạn có thể làm điều đó với 2 các hàm đơn giản:

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 

Điều này cũng sẽ nhanh hơn.

Các vấn đề liên quan