Eliminar Last Comma de una cadena

139

Con JavaScript, ¿cómo puedo eliminar la última coma, pero solo si la coma es el último carácter o si solo hay espacios en blanco después de la coma? Este es mi codigo. Tengo un violín de trabajo . Pero tiene un error.

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;
}
AnaMaria
fuente
¿Debería también eliminar los espacios al final?
Felix Kling
si es solo un espacio en blanco, sí
AnaMaria
¿Qué tal cualquier espacio antes de la coma en cuestión? ¿Deberían eliminarse también? en cuyo caso: str = str.replace (/, \ s * $ /, ""); se convertiría en str = str.replace (/ \ s *, \ s * $ /, "");
Amitabh

Respuestas:

391

Esto eliminará la última coma y cualquier espacio en blanco después:

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

Utiliza una expresión regular:

  • La /marca al principio y al final de la expresión regular.

  • El ,coincide con la coma

  • Los \scaracteres de espacio en blanco medios (espacio, tabulación, etc.) y los *medios 0 o más

  • Al $final significa el final de la cadena

Jon
fuente
Utilice str.replace (/, + / g, ","). Replace (/ (, \ s * $) | (^, *) /, ""); si desea eliminar la coma vacía inicial o, la coma doble, el ejemplo ",, 8, 7" se convertiría en "8,7"
Miguel
@ParkashKumar Jon ya ha mencionado sobre el último /. The / mark the beginning and end of the regular expression.
Asif Ali
Muy útil gracias.
Alok Ranjan
13

puedes eliminar la última coma de una cadena usando el método slice (), encuentra el siguiente ejemplo :

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

Aquí hay un ejemplo

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>

e-techpulse
fuente
9
function removeLastComma(str) {
   return str.replace(/,(\s+)?$/, '');   
}
Daniel Sloof
fuente
3

tiro largo aquí

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

fuente
Aunque la pregunta ya ha sido respondida, su solución me intrigó y decidí probar. Desafortunadamente, no funciona :(
AnaMaria
Use esta entrada "Esto, es una prueba". Idealmente, la salida debería ser la misma oración, pero en su programa la da como "Esto". Si estoy en lo cierto, entonces marque mi pregunta +1. Si me equivoco, marcaré su solución +1
AnaMaria
http://jsfiddle.net/rpss/3rSNr/ Todos los índices de comas se obtienen y se colocan en "currentIndex", reemplazando uno tras otro en el bucle (comprobando el patrón de coincidencia y obteniendo el índice cuando se encuentra una coincidencia). finalmente esa variable se deja con el índice de la última coma
:) cierto, ese código eliminará la última coma, pero desea que se elimine la última coma al final de la oración , allí ... allí ... su pregunta está marcada +1
No exactamente. Te perdiste esta parte "pero solo si la coma es el último personaje o si solo hay espacios en blanco después de la coma"
AnaMaria
3

La respuesta muy votada elimina no solo la coma final, sino también los espacios que siguen. Pero eliminar esos espacios siguientes no era parte del problema original. Entonces:

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

https://jsfiddle.net/dc8moa3k/

Boo Boo
fuente
1

El problema es que eliminas la última coma en la cadena, no la coma si es lo último en la cadena. Por lo tanto, debe poner un if para verificar si el último carácter es ',' y cambiarlo si lo es.

EDITAR: ¿Es realmente tan confuso?

'Esto es una cadena aleatoria'

Su código encuentra la última coma de la cadena y almacena solo 'Esto' porque la última coma está después de 'Esto', no al final de la cadena.

Hristo Valkanov
fuente
9
Su respuesta es más confusa que la pregunta. Lo siento por ser brutalmente honesto
AnaMaria
xD lo entiendo mucho. Su secuencia de comandos encuentra el último coma en la cadena y elimina todo lo que sigue. En ese caso, si la coma está en el medio como en este 'Esto, es una prueba'. el comando strng.lastIndexOf (","); devolverá 4, eliminando así todo después de la quinta letra. Por lo tanto, debe verificar si el "," es la última letra de la cadena antes de eliminar el resto :)
Hristo Valkanov
1
Entiendo lo que quieres decir y llegué a donde iba mal. Pero su respuesta es más adecuada como comentario ya que no me ayudó mucho. Espero que entiendas lo que estoy diciendo. Sin ofender
AnaMaria
Estaba planeando agregar código también si así lo solicitara, pero al editar en violín vi que ya había una respuesta perfecta, así que lo dejé así. :)
Hristo Valkanov
1

puedes eliminar la última coma:

var sentence = "I got,. commas, here,";
sentence = sentence.replace(/(.+),$/, '$1');
console.log(sentence);
Trai Hải Phòng
fuente
1

Eliminar la última coma. Ejemplo de trabajo

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>

Deepu Reghunath
fuente
1

Primero, uno debe verificar si el último personaje es una coma. Si existe, elimínelo.

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

NOTA str.indexOf (',', this.length - ','. Length) se puede simplificar a str.indexOf (',', this.length - 1)

Max Alexander Hanna
fuente