Comment puis-je nettoyer 29% de la chaîne ci-dessous à l'aide de JavaScript? J'ai besoin d'un moyen de supprimer tout pourcentage afin que le code doit également fonctionner avec cette chaîne: p>
7 Réponses :
Ceci devrait faire le travail!
var s = 'This is a long string which is 29% of the others.'; s = s.replace(/[0-9]+%\s?/g, ''); alert(s);
Fermer! Mais il ne supprime que le signe%. J'ai besoin de supprimer les chiffres aussi. Donc, de la chaîne ci-dessus, j'ai besoin de retirer 29 aussi.
@Jonathan: Si vous devez soutenir des décimales (par exemple, "bla bla 22,5% bla bla"), la regex est / \ d + (?: \. \ D +)?% / G code>, je crois .
@Jonathan: Je pense que vous devez avoir une réponse de Zanathiel mal copiée, travaille pour moi (comme mon regex pour les décimales, qui accueillera également des entiers): JSBIN.com/inarux Note le point de Michael sur l'espace après, cependant.
Cela semble bon! et fonctionne bien, mais au lieu de 29%, j'obtiens maintenant de l'espace blanc. Comment puis-je supprimer cela aussi?
@JonathancLark: Voir la réponse de Michael ci-dessous, il dispose éventuellement enlever les espaces sur la fin. Mais notez que si vous avez, disons ", puis nous l'avons réduit de 29%." Vous aurez toujours un espace entre "it" et le ".". Éviter que c'est beaucoup i> plus compliqué. :-) Mais je l'ai pris comme un défi; Voir ma réponse pour comment.
/ (?: \ d * \.) * \ d +% / code> couvrira les valeurs telles que 0,25% devraient-ils survenir.
@RightsAidfred: Bon point, mais je ne le ferais pas de cette façon, cela le permet .25.25.25.25.25%. :-)
@ T.J.Crowder: Ugh, tu as raison. Plus comme / \ s (?: \ D * \.)? \ D +% / code> ou peut-être un \ b code> au lieu du \ s code> , mais a définitivement eu besoin du ? code> au lieu du * code>.
L'expression régulière sans l'espace optionnel à la fin de l'expression, vous vous retrouvez avec p> \ d +% code> correspond à un ou plusieurs chiffres suivis d'un % code>. Qui est ensuite suivi d'un espace optionnel afin de ne pas vous retrouver avec deux espaces d'affilée.
Pourquoi pas simplement faire
var i = 22; //change this to what you want :)
document.getElementById("pct").innerHTML = i +"%";
Constitué c'est probable, mais l'OP n'est pas nécessairement i> le faire sur un navigateur Web. Les jours où Javascript était confiné aux navigateurs Web sont bien et qui ont vraiment disparu (s'ils existaient vraiment).
@ T.J.Crowder: Plus probablement, l'OP le fait dans un navigateur, mais simplement pour des raisons non liées au DOM.
Vous pouvez utiliser REGEX pour remplacer les chiffres suivis par "%"
var str = "This is a long string which is 29% of the others."; var withoutPercentage = str.replace(/(\d+%)/, "");
Pas besoin de le groupe de capture.
Votre meilleur pari est probablement des expressions régulières. Cette expression vous obtiendra le pourcentage: alors quelque chose comme ça devrait faire le truc: p> \ d +% code>.
Vous avez mentionné la manipulation des espaces. Voici une solution qui gère les espaces et les points décimaux potentiels dans le pourcentage:
/( ?)(?:(?:\d+\.\d+)|(?:\.\d+)|(?:\d+))%( ?)/g
(?) code> est un groupe de capture qui capture un espace devant les chiffres s'il en existe un. S'il n'y en a pas, cela n'obtiendra rien, car le ? Code> rend l'espace optionnel. LI>
- Le
\ d + code> correspond à des chiffres de pointe. LI>
- Le
(?: \. \ d +) code> correspond à un point décimal em> facultatif suivi de plusieurs chiffres. (C'est pas em> un groupe de capture, le (?: xxx) code> est pour le regroupement sans capture; le ? Code> après qu'il s'agisse de faire la totalité chose facultatif.) li>
- Le
% code> correspond à un % code>, bien sûr. li>
- le
(?) code> à la fin capture un espace suivant le % code>, s'il y en a un; Encore une fois c'est facultatif. Li>
-
String # Remplacer code> vous permet de donner une fonction qui sera appelée plutôt qu'une simple chaîne de remplacement. Li>
- La fonction reçoit le match complet comme premier argument, puis les groupes de capture comme des arguments restants. Si les deux groupes de capture ont des espaces dans eux, il y avait des espaces des deux côtés du pourcentage et nous retournons donc un seul espace (pour éviter de coincer les mots avant et après le pourcentage ensemble). Sinon, il n'y avait pas d'espace avant ou après le pourcentage, nous ne retournons donc rien du tout, donc nous mangeons l'espace qui était là. Li>
ul>
Si vous souhaitez également gérer des objets comme .25% code>, la regex change un bit: p> xxx pré> Démo en direct: Run | Modifier P>
CAVRE: P>
-
(?) code> - même qu'avant. li>
-
(?: ... | ... | ...) code> - une alternance em>, il correspondra à l'une des alternatives données. Les alternatives que nous lui donnons sont:
-
(?: \ d + \. \ d +) code> - un ou plusieurs chiffres suivis d'un point décimal suivi d'un ou plusieurs chiffres. LI>
-
(?: \. \ d +) code> - un point décimal de premier plan suivi d'un ou plusieurs chiffres li>
-
(?: \ d +) code> - juste une série de chiffres li>
ul> li>
-
% code> - correspondre au % code> li>
-
(?) code> - même qu'avant li>
ul> Tout le reste est le même. p> p>
Qu'est-ce que tu fais vraiment ici? Je n'ai même pas vu que tu avais une réponse! ;) +1
`var numstr =" 100% "; var num1 = 2;
numstr = numstr.replace ("%", "") p>
var CalculateValue = num1 * numstr;
// sortie: CalculateValue: 200 ` p>
S'il vous plaît ajouter une explication
Dans les chaînes javascript sont immuables. Par conséquent, nous devons ajouter des méthodes disponibles pour modifier les caractères ou remplacer les caractères dans les chaînes.