9
votes

JavaScript Match Substring après Regex

J'ai une ficelle qui ressemble à quelque chose comme xxx

je voudrais tout obtenir après le mr (essentiellement le # suivi de MR) * Toujours il y a toujours va être le -mr

Toute aide l'appréciera.


0 commentaires

6 Réponses :


0
votes

Qu'en est-il de la recherche de la position de -MR, puis obtenez la sous-chaîne de là + 3?

Ce n'est pas regex, mais semble fonctionner compte tenu de votre description?


0 commentaires

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

1 commentaires

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



4
votes

Pourquoi pas simplement: xxx

puis obtenir le contenu du groupe de capture?


0 commentaires

2
votes

Qu'en est-il de: xxx


4 commentaires

Wow, solution presque identique, pratiquement en même temps. À votre santé :).


Êtes-vous sûr de vouloir tester match [1] ? Ceci sera évalué à false si c'est 0 .


@Gumbo: Il n'évaluera pas de faux, car les matchs sont Strings NON Numéros , il n'évaluera que sur FALSE si la correspondance [1] est une chaîne vide.


Heh, il évaluerait False si ce serait une chaîne contenant '0' uniquement dans PHP, d'où la confusion, probablement. C'est une chose stupide à faire, BTW.



19
votes

Vous pouvez utiliser une réégygone comme la one Bart vous a donné, mais je suggère d'utiliser le match plutôt que de remplacer, car, dans le cas où une correspondance n'est pas trouvée, le résultat est la chaîne entière lorsque vous utilisez Remplacer, tandis que NULL lors de l'utilisation de la correspondance, qui semble plus logique. (en général cependant).

Quelque chose comme ça serait le truc: p>

p>

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


0 commentaires

1
votes

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;


2 commentaires

Il n'est pas nécessaire d'inclure le premier . * et le trait d'union ne nécessite aucune évasion. Cela fonctionne aussi bien: "- M. (. *)" . Mais le . * est dangereux: s'il y a beaucoup plus de texte après "- MR" Le . * va "manger". Bien sûr, l'OP n'était pas vraiment clair sur quel texte pourrait venir après "- M." .


C'est un bon point. J'avais supposé que l'OP voudrait tout après le "-MR". J'ai modifié le code pour supprimer l'évacuation avant le trait d'union et restreindre la subexpression sur les chiffres. J'échappe tout hors de l'habitude plus que toute autre chose. :)