2016-12-14 1 views
-2

J'ai une chaîne sous la forme: « xMyS »Utilisation d'expressions régulières pour extraire les valeurs en Javascript

Je veux extraire x et y en utilisant les expressions Javascript Regex.

Par exemple, si la chaîne est

10M225S 

J'ai besoin 10 et 225 de cette situation. De plus, il se peut que la chaîne ne contienne aucune partie x ou y de part et d'autre. Par exemple, il peut être juste 225S ou juste 10M.

EDIT: J'ai essayé des choses comme .match(), mais je ne sais pas comment extraire des valeurs dans le format mentionné.

EDIT: Le regex j'ai essayé jusqu'à présent est /(\w+)M(\w+)S/, mais il semble ne fonctionne que pour 10M225S et non pour 10M et 225S.

+2

avez-vous essayé quelque chose? où es-tu coincé? – Cruiser

+2

Qu'avez-vous essayé jusqu'à présent? Avez-vous google "expressions régulières javascript"? – slim

+0

Oui ... J'ai fait google à ce sujet. Trouvé à propos de .match(), mais n'arrive pas à le faire. – dsaket

Répondre

0

Vous pouvez faire quelque chose comme ceci:

var str = "10M255S" 
var match = str.match(/^([0-9]*)M*([0-9]*)S*$/) 

Alors match[1] est 10 et match[2] est 255

Si var str = "10M", puis match[1] est 10 et si var str = "255S", puis match[1] est 255

En l'un des trois cas, les matches commencent f du second élément du tableau match.

Espérons que cela aide.

+0

Mais il donne le même résultat pour '10M' et' 10S'. Comment pourrais-je distinguer? – dsaket

+0

C'est vrai. Selon la question, vous avez dit que vous voulez extraire les 'x' et/ou' y' qui sont liés à 'M' et' S' respectivement. Si vous fournissez les mêmes valeurs x et y dans la chaîne, pourquoi voulez-vous les distinguer (car les deux sont identiques)? – Terminater

+0

Et si vous voulez vraiment faire la distinction entre tose two, utilisez le premier élément du tableau 'match', qui donne toute la chaîne correspondante. – Terminater

1

vous pouvez utiliser .split() pour diviser les cordes:

var str = "10M225S" 
 
var m = str.split("M")[0]; 
 
var s = str.split("M")[1].split("S")[0]; 
 

 
console.log("m >>> " + m); 
 
console.log("s >>> " + s);

pas besoin d'expressions régulières dans ce cas.

+0

Merci pour l'alternative. Mais j'ai besoin d'une approche regex. – dsaket

+0

@dsaket Pourquoi? Parce que c'est les devoirs?Si c'est le cas, votre tuteur vous a probablement fourni la documentation dont vous avez besoin. – slim

+0

Non .. c'est une situation que j'ai rencontrée lorsque je travaillais sur une application. – dsaket

0

réponse de K-Gun est logique si le modèle ne varie jamais, si 'M' et 'S' sont placeholder simplement des exemples de texte arbitraire, puis utilisez le RegExp/\ d +/g

<!DOCTYPE html> 
<html> 
<head> 
    <script> 
    function fn() { 
     var re = /\d+/g, // match digits, globally 
     str = '10M225S', 
     result = [], 
     temp; 
     // process successive matches 
     while ((temp = re.exec(str)) !== null) 
     result.push(temp[0]); 

     document.getElementById("result").innerText = result.toString(); 
    } 
    </script> 
</head> 
<body onload="fn()"> 
    <h1 id="result"></h1> 
</body> 
</html> 

Voici un plunkr démontrant le code.

Le RegExp re correspond à des suites de chiffres. Cela fonctionnera indépendamment des caractères non numériques, par ex. il correspondrait à "10ZXZZ225FOZ".

+0

il donne le même résultat pour 10M et 10S. c'est-à-dire 10. Comment distinguerais-je? – dsaket

+0

@dsaket jette un coup d'oeil au plunkr que j'ai lié parce que c'est incorrect. – RamblinRose