Usuń ostatni przecinek z ciągu

139

Używając JavaScript, jak mogę usunąć ostatni przecinek, ale tylko wtedy, gdy przecinek jest ostatnim znakiem lub jeśli po przecinku jest tylko spacja? To jest mój kod. Mam działające skrzypce . Ale ma błąd.

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
źródło
Czy powinien również usunąć spacje na końcu?
Felix Kling,
jeśli jest to jedyne puste miejsce, tak
AnaMaria
A co ze spacjami przed danym przecinkiem? Czy te też powinny zostać usunięte? w takim przypadku: str = str.replace (/, \ s * $ /, ""); stałoby się str = str.replace (/ \ s *, \ s * $ /, "");
Amitabh

Odpowiedzi:

391

Spowoduje to usunięcie ostatniego przecinka i wszelkich odstępów po nim:

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

Używa wyrażenia regularnego:

  • /Znak początek i koniec wyrażenia regularnego

  • ,Dopasowuje przecinek

  • Te \sśrodki białych znaków (przestrzeń, zakładka, etc) oraz *środki 0 lub więcej

  • Na $końcu oznacza koniec łańcucha

Jon
źródło
Użyj str.replace (/, + / g, ","). Replace (/ (, \ s * $) | (^, *) /, ""); jeśli chcesz usunąć początkowy pusty przecinek lub podwójny przecinek, na przykład „,, 8,, 7” stanie się „8,7”
Miguel
@ParkashKumar Jon już wspomniał o ostatnim /. The / mark the beginning and end of the regular expression.
Asif Ali
Bardzo przydatne dzięki.
Alok Ranjan
13

możesz usunąć ostatni przecinek z ciągu za pomocą metody slice (), znajdź poniższy przykład :

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

Oto przykład

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

długi strzał tutaj

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

źródło
Choć odpowiedź na to pytanie została już udzielona, ​​zaintrygowało mnie Twoje rozwiązanie i postanowiłem przetestować. Niestety to nie działa :(
AnaMaria
Użyj tego wpisu „To jest test”. Idealnie, wyjście powinno być tym samym zdaniem, ale w twoim programie podaje je jako „To”. Jeśli mam rację, zaznacz moje pytanie +1. Jeśli się mylę,
oznaczę
http://jsfiddle.net/rpss/3rSNr/ Wszystkie indeksy przecinków są pobierane i umieszczane w „currentIndex”, zastępując jeden po drugim w pętli (sprawdzanie pasującego wzorca i pobieranie indeksu po znalezieniu dopasowania). na koniec ta zmienna zostaje z indeksem ostatniego przecinka
:) to prawda, ten kod usunie ostatni przecinek, ale chciałeś, aby ostatni przecinek na końcu zdania został usunięty, tam .. tutaj .. twoje pytanie jest oznaczone +1
Nie dokładnie. Przegapiłeś tę część „ale tylko wtedy, gdy przecinek jest ostatnim znakiem lub jeśli po przecinku jest tylko spacja”
AnaMaria
3

Bardzo pozytywna odpowiedź usuwa nie tylko ostatni przecinek, ale także wszelkie następujące po nim spacje. Ale usunięcie tych następujących spacji nie było częścią pierwotnego problemu. Więc:

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

https://jsfiddle.net/dc8moa3k/

Boo Boo
źródło
1

Problem polega na tym, że usuwasz ostatni przecinek w ciągu, a nie przecinek, jeśli jest to ostatnia rzecz w ciągu. Powinieneś więc wstawić if, aby sprawdzić, czy ostatni znak to „,” i zmienić go, jeśli tak jest.

EDYCJA: Czy to naprawdę takie zagmatwane?

„To jest losowy ciąg”

Twój kod znajduje ostatni przecinek z ciągu i przechowuje tylko „This”, ponieważ ostatni przecinek występuje po „This”, a nie na końcu ciągu.

Hristo Valkanov
źródło
9
Twoja odpowiedź jest bardziej zagmatwana niż pytanie. Przepraszam, że
jestem
xD Często to rozumiem. Twój skrypt znajduje ostatnią przecinek w ciągu i usuwa wszystko po nim. W takim przypadku, jeśli przecinek jest pośrodku, jak w tym „To jest test”. polecenie strng.lastIndexOf (","); zwróci 4, usuwając wszystko po piątej literze. Musisz więc sprawdzić, czy „,” jest ostatnią literą ciągu, zanim usuniesz resztę :)
Hristo Valkanov
1
Rozumiem, co masz na myśli i doszedłem do miejsca, w którym popełniłem błąd. Ale twoja odpowiedź jest bardziej odpowiednia jako komentarz, ponieważ niewiele mi pomogła. Mam nadzieję, że rozumiesz, co mówię. Bez obrazy
AnaMaria
Planowałem również dodać kod na żądanie, ale po edycji na skrzypcach zobaczyłem, że jest już idealna odpowiedź, więc zostawiłem ją tak. :)
Hristo Valkanov
1

możesz usunąć ostatni przecinek:

var sentence = "I got,. commas, here,";
sentence = sentence.replace(/(.+),$/, '$1');
console.log(sentence);
Trai Hải Phong
źródło
1

Usuń ostatni przecinek. Przykład roboczy

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
źródło
1

Najpierw należy sprawdzić, czy ostatnim znakiem jest przecinek. Jeśli istnieje, usuń go.

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

UWAGA str.indexOf (',', this.length - ','. Length) można uprościć do str.indexOf (',', this.length - 1)

Max Alexander Hanna
źródło