2009-10-14 9 views
8

ho una stringa che sembra qualcosa di similejavascript stringa partita dopo regexp

something30-mr200 

vorrei ottenere tutto dopo la mr (in pratica il # seguito da mr) * sempre ci sta per essere il -mr

Qualsiasi aiuto sarà apprezzato.

risposta

0

Che dire trovare la posizione di -mr, quindi ottenere la sottostringa da lì + 3?

Non è un'espressione regolare, ma sembra funzionare data la tua descrizione?

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

o

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

Hai dimenticato di chiudere la stringa '" mr' –

+0

Grazie, ora fissati – Kamarey

4

Perché non semplicemente:

-mr(\d+) 

ottenendo quindi il contenuto del gruppo di cattura?

2

Che dire:

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, soluzione quasi identica, praticamente allo stesso tempo. Cheers :) – treznik

+1

Sei sicuro di voler testare 'match [1]'? Questo sarà valutato a * false * se è '0'. – Gumbo

+1

@Gumbo: Non valuterà falso, perché le partite sono ** Strings ** not ** Numbers **, i t valuterà solo su false se match [1] è una stringa vuota. – CMS

18

È possibile utilizzare un'espressione regolare come quello Bart ti ha dato, ma io suggerisco di usare partita piuttosto che sostituire, dal momento che nel caso in cui una partita non viene trovato, il risultato è l'intera stringa quando si utilizza replace, mentre null quando si utilizza match, che sembra più logico. (come un generale però).

Qualcosa di simile a questo sarebbe fare il trucco:

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

Questo può funzionare per voi:.

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

Non è necessario includere il primo '. *' E il trattino non ha bisogno di escape. Funziona anche così: '" -mr (. *) "'. Ma il '. *' È pericoloso: se c'è molto più testo dopo "" -mr "' il '. *' Lo "mangia". Naturalmente, l'OP non era chiaro su quale testo potesse venire dopo "" -mr "'. –

+0

Questo è un buon punto. Supponevo che l'OP avrebbe voluto tutto dopo il "-mr". Ho modificato il codice per rimuovere l'escape prima del trattino e limitare la sottoespressione alle cifre. Mi sfugge tutto per abitudine più di ogni altra cosa. :) –

Problemi correlati