2009-10-14 5 views
8

J'ai une chaîne qui regarde quelque chose commejavascript substring match après regexp

something30-mr200 

Je voudrais obtenir tout après la mr (essentiellement le # suivi par M.) * toujours là va être le -mr

Toute aide sera en mesure d'apprécier.

Répondre

0

Qu'en est-il de trouver la position de -mr, alors obtenir la sous-chaîne de +3?

Ce n'est pas regex, mais semble fonctionner à votre description?

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

ou

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

Vous avez oublié de fermer la chaîne '" de mr' –

+0

Merci, maintenant fixes – Kamarey

4

Pourquoi ne pas simplement:

-mr(\d+) 

ensuite obtenir le contenu du groupe de capture?

2

Qu'en est-:

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, Cheers :) – treznik

+1

Etes-vous sûr de vouloir tester 'match [1]'? Cela sera évalué à * false * si c'est 0. – Gumbo

+1

@Gumbo: Il n'évaluera pas false, car les correspondances sont ** Strings ** et non ** Numbers **, i t évaluera uniquement à false si match [1] est une chaîne vide. – CMS

18

Vous pouvez utiliser une expression rationnelle comme celle Bart vous a donné, mais je suggère en utilisant correspondance plutôt que de le remplacer, car dans le cas où un match ne se trouve pas, le résultat est la chaîne entière lors de l'utilisation de replace, while null lors de l'utilisation de match, ce qui semble plus logique. (en général, cependant).

Quelque chose comme ça ferait l'affaire:

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

Cela peut fonctionner pour vous.

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

Il n'est pas nécessaire d'inclure le premier '. *' Et le trait d'union n'a pas besoin d'être échappé. Cela fonctionne aussi: '" -mr (. *) "'. Mais le '. *' Est dangereux: s'il y a beaucoup plus de texte après '" -mr "' le '. *' Va le "manger". Bien sûr, l'OP n'était pas vraiment clair sur le texte qui pourrait venir après '" -mr "'. –

+0

C'est un bon point. Je supposais que l'OP voudrait tout après le "-mr". J'ai modifié le code pour supprimer l'échappement avant le trait d'union et limiter la sous-expression aux chiffres. J'échappe à tout par habitude plus qu'autre chose. :) –