2009-10-14 12 views
8

Mam ciąg, które wyglądają mniej więcej takjavascript mecz podciąg po regexp

something30-mr200 

chciałbym, aby wszystko po mr (Zasadniczo # następnie mr) * zawsze ma być -mr

Każda pomoc będzie doceniana.

Odpowiedz

0

Co ze znajdowaniem pozycji -mr, a następnie pobrać z niej podciąg +3?

To nie jest wyrażenie regularne, ale wydaje się działać z twoim opisem?

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

lub

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

zapomniałeś zamknąć łańcuch '" mr' –

+0

Dzięki, teraz stały – Kamarey

4

Dlaczego nie po prostu:

-mr(\d+) 

Potem coraz zawartość grupy przechwytywania?

2

Co o:

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, prawie identyczne rozwiązanie, praktycznie w tym samym czasie .. Pozdrawiam :). – treznik

+1

Czy na pewno chcesz przetestować 'match [1]'? Zostanie to ocenione na * false *, jeśli jest to '0'. – Gumbo

+1

@Gumbo: To nie oceni false, ponieważ dopasowania to: ** Ciągi ** nie ** Liczby **, i t będzie wartościować tylko na false, jeśli dopasowanie [1] jest pustym łańcuchem. – CMS

18

Można użyć wyrażenia regularnego jak ten Bart dał wam, ale sugeruję, używając mecz zamiast zastąpić, ponieważ w przypadku, gdy nie zostanie znaleziona, wynik jest cały łańcuch podczas używania zamień, podczas gdy wartość null podczas używania dopasowania, co wydaje się bardziej logiczne. (ogólnie jednak).

Coś takiego byłoby rade:

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

może pracować dla Ciebie.

// 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

Nie ma potrzeby dołączania pierwszego '. *', A łącznik nie potrzebuje ucieczki. Działa to również: '" -mr (. *) "'. Ale '. *' Jest niebezpieczne: jeśli po '" -mr "jest dużo więcej tekstu,' '* *" je ". Oczywiście PO nie bardzo wiedział, jaki tekst może nadejść po "-mr". –

+0

To dobry punkt. Zakładałem, że PO będzie chciał wszystkiego po "-mr". Zmodyfikowałem kod, aby usunąć ujęcie przed łącznikiem i ograniczyć podwyrażenia do cyfr. Uciekam z przyzwyczajenia bardziej niż cokolwiek innego. :) –

Powiązane problemy