2009-10-14 33 views
8

Tôi có một chuỗi mà trông giống nhưjavascript trận chuỗi sau regexp

something30-mr200 

Tôi muốn để có được tất cả mọi thứ sau khi mr (về cơ bản # tiếp theo mr) * luôn có được sẽ là -mr

Bất kỳ trợ giúp nào cũng sẽ đánh giá cao điều đó.

Trả lời

0

Điều gì về việc tìm vị trí của -mr, sau đó nhận chuỗi con từ đó + 3?

Nó không phải là regex, nhưng có vẻ như đã làm việc cho mô tả của bạn?

4
var result = "something30-mr200".split("mr")[1]; 

hoặc

var result = "something30-mr200".match(/mr(.*)/)[1]; 
+0

Bạn quên đóng chuỗi '" mr' –

+0

Cảm ơn, bây giờ cố định – Kamarey

4

Tại sao không chỉ đơn giản là:

-mr(\d+) 

Sau đó nhận được các nội dung của nhóm chụp?

2

gì về:

function getNumber(input) { // rename with a meaningful name 
    var match = input.match(/^.*-mr(\d+)$/); 

    if (match) { // check if the input string matched the pattern 
    return match[1]; // get the capturing group 
    } 
} 

getNumber("something30-mr200"); // "200" 
+0

Wow, – treznik

+1

Bạn có chắc chắn muốn thử nghiệm 'match [1]'? Điều này sẽ được đánh giá thành * false * nếu nó là '0'. – Gumbo

+1

@Gumbo: Nó sẽ không đánh giá sai, bởi vì các trận đấu là ** Chuỗi ** không ** Số **, tôi t sẽ chỉ đánh giá sai nếu so khớp [1] là một chuỗi rỗng. – CMS

18

Bạn có thể sử dụng một regexp như một Bart đã cho bạn, nhưng tôi đề nghị sử dụng phù hợp chứ không phải là thay thế, vì trong trường hợp một trận đấu không được tìm thấy, kết quả là toàn bộ chuỗi khi sử dụng thay thế, trong khi null khi sử dụng kết hợp, điều này có vẻ hợp lý hơn. (như một tổng thể mặc dù).

Something như thế này sẽ làm các trick:

functiong getNumber(string) { 
    var matches = string.match(/-mr([0-9]+)/); 
    return matches[1]; 
} 
getNumber("something30-mr200"); 
1

Điều này có thể làm việc cho bạn.

// Perform the reg exp test 
new RegExp(".*-mr(\d+)").test("something30-mr200"); 
// result will equal the value of the first subexpression 
var result = RegExp.$1; 
+0

Không cần phải bao gồm '. *' Đầu tiên và dấu gạch ngang không cần thoát. Điều này cũng hoạt động: '" -mr (. *) "'. Nhưng '. *' Là nguy hiểm: nếu có nhiều văn bản hơn sau khi '" -mr "' thì '. *' Sẽ "ăn" nó. Tất nhiên, OP không thực sự rõ ràng về những gì văn bản có thể đến sau khi '" -mr "'. –

+0

Đó là một điểm tốt. Tôi đã giả định rằng OP sẽ muốn mọi thứ sau "-mr". Tôi đã sửa đổi mã để xóa lối thoát trước dấu gạch nối và hạn chế biểu thức con thành chữ số. Tôi thoát khỏi mọi thứ từ thói quen hơn bất cứ thứ gì khác. :) –

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