Remover Última Vírgula de uma sequência

139

Usando JavaScript, como posso remover a última vírgula, mas apenas se a vírgula for o último caractere ou se houver apenas espaço em branco após a vírgula? Este é o meu código. Eu tenho um violino de trabalho . Mas tem um 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;
}
Ana Maria
fonte
Também deve remover os espaços no final?
Felix Kling
se o seu único espaço em branco, sim
AnaMaria
E quanto a espaços antes da vírgula em questão? Devem ser removidos também? nesse caso: str = str.replace (/, \ s * $ /, ""); se tornaria str = str.replace (/ \ s *, \ s * $ /, "");
Amitabh

Respostas:

391

Isso removerá a última vírgula e qualquer espaço em branco depois dela:

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

Ele usa uma expressão regular:

  • A /marca do início e do fim da expressão regular

  • A ,corresponde a vírgula

  • Os \scaracteres de espaço em branco médio (espaço, tabulação etc.) e o *meio 0 ou mais

  • O $no final significa o fim da string

Jon
fonte
Use str.replace (/, + / g, ","). Replace (/ (, \ s * $) | (^, *) /, ""); se você deseja remover a vírgula inicial vazio ou, vírgula dupla, exemplo" ,, 8, 7" se tornaria '8,7'
Miguel
@ParkashKumar Jon já mencionou o último /. The / mark the beginning and end of the regular expression.
Asif Ali
Muito útil Obrigado.
Alok Ranjan
13

você pode remover a última vírgula de uma string usando o método slice (), encontre o exemplo abaixo :

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

Aqui está um exemplo

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
fonte
9
function removeLastComma(str) {
   return str.replace(/,(\s+)?$/, '');   
}
Daniel Sloof
fonte
3

tiro longo aqui

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

fonte
Embora a pergunta já tenha sido respondida, fiquei intrigado com sua solução e decidi testar. Infelizmente, ele não funciona :(
AnaMaria
Use esta entrada "Isto é um teste". Idealmente, a saída deve ter a mesma sentença, mas no seu programa ela a apresenta como "Isto". Se eu estiver certo, marque minha pergunta como +1. Se estou errado eu vou marcar a sua solução +1
AnaMaria
http://jsfiddle.net/rpss/3rSNr/ Todos os índices de vírgulas são buscados e colocados no "currentIndex", substituindo um após o outro no loop (buscando o padrão de correspondência e buscando o índice quando uma correspondência é encontrada). finalmente essa variável é deixada com o índice da última vírgula
:) true, esse código removerá a última vírgula, mas você queria que a última vírgula no final da frase fosse removida, existe ... sua pergunta está marcada como +1
Não exatamente. Você perdeu esta parte "mas somente se a vírgula é o último caractere ou se existe apenas um espaço em branco após a vírgula"
AnaMaria
3

A resposta muito votada remove não apenas a vírgula final, mas também os espaços a seguir. Mas remover os seguintes espaços não era o que fazia parte do problema original. Assim:

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

https://jsfiddle.net/dc8moa3k/

Booboo
fonte
1

O problema é que você remove a última vírgula da sequência, não a vírgula se for a última coisa na sequência. Portanto, você deve colocar um if para verificar se o último caractere é ',' e alterá-lo, se for.

EDIT: É realmente tão confuso?

'Isso é uma string aleatória'

Seu código localiza a última vírgula da string e armazena apenas 'This', porque a última vírgula é depois de 'This' e não no final da string.

Hristo Valkanov
fonte
9
Sua resposta é mais confusa do que a pergunta. Desculpe por ser brutalmente honesto
AnaMaria
xD eu entendo muito isso. Seu script encontra o último coma na string e remove tudo depois dele. Nesse caso, se a vírgula estiver no meio, como neste 'Isto é um teste'. o comando strng.lastIndexOf (","); retornará 4, removendo tudo depois da 5ª letra. Então você tem que verificar se a "" é a última carta da corda antes de remover o resto :)
Hristo Valkanov
1
Eu entendo o que você quer dizer e cheguei onde estava errado. Mas você responde é mais adequado como comentário, pois não me ajudou muito. Espero que você entenda o que estou dizendo. Sem ofensa
AnaMaria
Eu estava planejando adicionar código também, se solicitado, mas, ao editar o violino, vi que já havia uma resposta perfeita, então deixei assim. :)
Hristo Valkanov
1

você pode remover a última vírgula:

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

Remova a última vírgula. Exemplo de trabalho

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
fonte
1

Primeiro, deve-se verificar se o último caractere é uma vírgula. Se existir, remova-o.

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

NOTA str.indexOf (',', this.length - ','. Length) pode ser simplificado para str.indexOf (',', this.length - 1)

Max Alexander Hanna
fonte