Supprimer la dernière virgule d'une chaîne


139

En utilisant JavaScript, comment puis-je supprimer la dernière virgule, mais seulement si la virgule est le dernier caractère ou s'il n'y a qu'un espace blanc après la virgule? Ceci est mon code. J'ai un violon qui fonctionne . Mais il y a un bug.

var str = 'This, is a test.'; 
alert( removeLastComma(str) ); // should remain unchanged

var str = 'This, is a test,'; 
alert( removeLastComma(str) ); // should remove the last comma

var str = 'This is a test,          '; 
alert( removeLastComma(str) ); // should remove the last comma

function removeLastComma(strng){        
    var n=strng.lastIndexOf(",");
    var a=strng.substring(0,n) 
    return a;
}

Doit-il également supprimer les espaces à la fin?
Felix Kling

si son seul espace vide, oui
AnaMaria

Que diriez-vous des espaces avant la virgule en question? Devraient-ils également être supprimés? auquel cas: str = str.replace (/, \ s * $ /, ""); deviendrait str = str.replace (/ \ s *, \ s * $ /, "");
Amitabh

Réponses:


391

Cela supprimera la dernière virgule et tout espace blanc après:

str = str.replace(/,\s*$/, "");

Il utilise une expression régulière:

  • La /marque le début et la fin de l'expression régulière

  • Les ,correspond à la virgule

  • Les \scaractères d'espaces moyens (espace, tabulation, etc.) et les *moyens 0 ou plus

  • Le $à la fin signifie la fin de la chaîne


Utilisez str.replace (/, + / g, ","). Replace (/ (, \ s * $) | (^, *) /, ""); si vous voulez supprimer la virgule vide initiale ou, double virgule, exemple ",, 8,, 7" deviendrait "8,7"
Miguel

@ParkashKumar Jon a déjà mentionné le dernier /. The / mark the beginning and end of the regular expression.
Asif Ali

Merci très utile.
Alok Ranjan le

13

vous pouvez supprimer la dernière virgule d'une chaîne en utilisant la méthode slice (), trouvez l' exemple ci-dessous :

var strVal = $.trim($('.txtValue').val());
var lastChar = strVal.slice(-1);
if (lastChar == ',') {
    strVal = strVal.slice(0, -1);
}

Voici un exemple

function myFunction() {
	var strVal = $.trim($('.txtValue').text());
	var lastChar = strVal.slice(-1);
	if (lastChar == ',') { // check last character is string
		strVal = strVal.slice(0, -1); // trim last character
		$("#demo").text(strVal);
	}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<p class="txtValue">Striing with Commma,</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>



3

long shot ici

var sentence="I got,. commas, here,";
var pattern=/,/g;
var currentIndex;
while (pattern.test(sentence)==true)  {    
  currentIndex=pattern.lastIndex;
 }
if(currentIndex==sentence.trim().length)
alert(sentence.substring(0,currentIndex-1));
else
 alert(sentence);

Bien que la question ait déjà reçu une réponse, j'ai été intrigué par votre solution et j'ai décidé de tester. Malheureusement, cela ne fonctionne pas :(
AnaMaria

Utilisez cette entrée "Ceci, est un test." Idéalement, la sortie devrait être la même phrase mais dans votre programme, elle la donne comme "Ceci". Si j'ai raison, marquez ma question +1. Si je me trompe, je marquerai votre solution +1
AnaMaria

http://jsfiddle.net/rpss/3rSNr/ Tous les index des virgules sont récupérés et mis dans "currentIndex" en les remplaçant les uns après les autres dans la boucle (test de correspondance du motif et récupération de l'index lorsqu'une correspondance est trouvée). enfin cette variable est laissée avec l'index de la dernière virgule

:) vrai, ce code supprimera la dernière virgule, mais vous vouliez que la dernière virgule à la fin de la phrase soit supprimée, là .. là .. votre question est marquée +1

Pas exactement. Vous avez manqué cette partie "mais seulement si la virgule est le dernier caractère ou s'il n'y a qu'un espace blanc après la virgule"
AnaMaria

3

La réponse fortement votée supprime non seulement la virgule finale, mais également tous les espaces qui suivent. Mais la suppression des espaces suivants ne faisait pas partie du problème initial. Alors:

let str = 'abc,def,ghi, ';
let str2 = str.replace(/,(?=\s*$)/, '');
alert("'" + str2 + "'");
'abc,def,ghi '

https://jsfiddle.net/dc8moa3k/


1

Le problème est que vous supprimez la dernière virgule de la chaîne, pas la virgule si c'est la dernière chose de la chaîne. Vous devriez donc mettre un if pour vérifier si le dernier caractère est «,» et le changer si c'est le cas.

EDIT: Est-ce vraiment déroutant?

'Ceci, est une chaîne aléatoire'

Votre code trouve la dernière virgule de la chaîne et stocke uniquement «Ceci», car la dernière virgule est après «Ceci» et non à la fin de la chaîne.


9
Votre réponse est plus déroutante que la question. Désolé d'être brutalement honnête
AnaMaria

xD je comprends beaucoup. Votre script trouve la dernière virgule dans la chaîne et supprime tout ce qui suit. Dans ce cas, si la virgule est au milieu comme dans celui-ci 'Ceci, est un test.' la commande strng.lastIndexOf (","); retournera 4, supprimant ainsi tout après la 5ème lettre. Donc, vous devez vérifier si le "," est la dernière lettre de la chaîne avant de supprimer le reste :)
Hristo Valkanov

1
Je comprends ce que tu veux dire et je suis arrivé là où je me suis trompé. Mais votre réponse est plus appropriée comme commentaire car cela ne m'a pas beaucoup aidé. J'espère que vous comprenez ce que je dis. Aucune infraction
AnaMaria

J'avais l'intention d'ajouter du code aussi si demandé, mais lors de l'édition en violon, j'ai vu qu'il y avait déjà une réponse parfaite, alors je l'ai laissée comme ça. :)
Hristo Valkanov

1

vous pouvez supprimer la dernière virgule:

var sentence = "I got,. commas, here,";
sentence = sentence.replace(/(.+),$/, '$1');
console.log(sentence);

1

Supprimez la dernière virgule. Exemple de travail

function truncateText() {
  var str= document.getElementById('input').value;
  str = str.replace(/,\s*$/, "");
  console.log(str);
}
<input id="input" value="address line one,"/>
<button onclick="truncateText()">Truncate</button>


1

Tout d'abord, il faut vérifier si le dernier caractère est une virgule. S'il existe, supprimez-le.

if (str.indexOf(',', this.length - ','.length) !== -1) {
    str = str.substring(0, str.length - 1);
}

REMARQUE str.indexOf (',', this.length - ','. Length) peut être simplifié en str.indexOf (',', this.length - 1)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.