Rimuovi Last Comma da una stringa


139

Utilizzando JavaScript, come posso rimuovere l'ultima virgola, ma solo se la virgola è l'ultimo carattere o se c'è solo uno spazio bianco dopo la virgola? Questo è il mio codice Ho un violino funzionante . Ma ha 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;
}

Dovrebbe anche rimuovere gli spazi alla fine?
Felix Kling,

se è solo uno spazio vuoto, sì
AnaMaria,

Che ne dici di spazi prima della virgola in questione? Anche quelli dovrebbero essere rimossi? nel qual caso: str = str.replace (/, \ s * $ /, ""); diventerebbe str = str.replace (/ \ s *, \ s * $ /, "");
Amitabh,

Risposte:


391

Questo rimuoverà l'ultima virgola e tutti gli spazi bianchi dopo di essa:

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

Usa un'espressione regolare:

  • Il /segno l'inizio e la fine dell'espressione regolare

  • L' ,corrisponde la virgola

  • I \scaratteri spazi bianchi (spazio, tab, ecc.) E i *mezzi 0 o più

  • Il $alla fine indica la fine della stringa


Usa str.replace (/, + / g, ","). Replace (/ (, \ s * $) | (^, *) /, ""); se si desidera rimuovere la virgola vuota iniziale o, la virgola doppia, l'esempio ",, 8,, 7" diventerebbe "8,7"
Miguel

@ParkashKumar Jon ha già parlato dell'ultimo /. The / mark the beginning and end of the regular expression.
Asif Ali,

Grazie molto utile.
Alok Ranjan,

13

puoi rimuovere l'ultima virgola da una stringa usando il metodo slice (), trova l' esempio seguente :

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

Ecco un esempio

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>


9
function removeLastComma(str) {
   return str.replace(/,(\s+)?$/, '');   
}

3

colpo lungo qui

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);

Anche se alla domanda è già stata data una risposta, sono rimasto incuriosito dalla tua soluzione e ho deciso di provare. Sfortunatamente, non funziona :(
AnaMaria,

Usa questo input "Questo è un test". Idealmente l'output dovrebbe essere la stessa frase ma nel tuo programma lo dà come "This". Se ho ragione, segna la mia domanda +1. Se sbaglio
segnerò la

http://jsfiddle.net/rpss/3rSNr/ Tutti gli indici delle virgole vengono recuperati e inseriti in "currentIndex" sostituendoli uno dopo l'altro nel ciclo (ricerca del modello di corrispondenza e recupero dell'indice quando viene trovata una corrispondenza). infine quella variabile viene lasciata con l'indice dell'ultima virgola

:) vero, quel codice rimuoverà l'ultima virgola, ma volevi che fosse rimossa l'ultima virgola alla fine della frase , ecco ... la tua domanda è contrassegnata con +1

Non esattamente. Hai perso questa parte "ma solo se la virgola è l'ultimo carattere o se c'è solo uno spazio bianco dopo la virgola"
AnaMaria,

3

La risposta molto votata rimuove non solo la virgola finale, ma anche tutti gli spazi che seguono. Ma rimuovere quei seguenti spazi non era ciò che faceva parte del problema originale. Così:

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

https://jsfiddle.net/dc8moa3k/


1

Il problema è che rimuovi l'ultima virgola nella stringa, non la virgola se è l'ultima cosa nella stringa. Quindi dovresti inserire un if per verificare se l'ultimo carattere è ',' e cambiarlo se lo è.

EDIT: è davvero così confuso?

"Questa è una stringa casuale"

Il tuo codice trova l'ultima virgola dalla stringa e memorizza solo 'This', perché l'ultima virgola è dopo 'This' non alla fine della stringa.


9
La tua risposta è più confusa della domanda.
Ci

xD lo capisco molto. Il tuo script trova l'ultimo coma nella stringa e rimuove tutto ciò che lo segue. In tal caso, se la virgola è nel mezzo come in questo "Questo è un test". il comando strng.lastIndexOf (","); restituirà 4, rimuovendo così tutto dopo la 5a lettera. Quindi devi controllare se il "," è l'ultima lettera della stringa prima di rimuovere il resto :)
Hristo Valkanov,

1
capisco cosa intendi e ho capito dove stavo sbagliando. Ma la tua risposta è più adatta come commento in quanto non mi ha aiutato molto. Spero che tu ottenga quello che sto dicendo. Senza offesa
AnaMaria,

Avevo intenzione di aggiungere anche il codice, se richiesto, ma dopo aver modificato il violino ho visto che c'era già una risposta perfetta, quindi l'ho lasciato così. :)
Hristo Valkanov,

1

puoi rimuovere l'ultima virgola:

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

1

Rimuovi l'ultima virgola. Esempio funzionante

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

Innanzitutto, si dovrebbe verificare se l'ultimo carattere è una virgola. Se esiste, rimuovilo.

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

NOTA str.indexOf (',', this.length - ','. Length) può essere semplificato in str.indexOf (',', this.length - 1)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.