Bir dizeden Son Virgül Kaldır


139

JavaScript kullanarak, son virgülü nasıl kaldırabilirim, ancak yalnızca virgül son karakterse veya virgülden sonra yalnızca beyaz boşluk varsa? Bu benim kodum. Çalışan bir kemanım var . Ama bir hatası var.

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

Sonunda boşlukları da kaldırmalı mı?
Felix Kling

tek
boşluksa

Söz konusu virgülden önceki boşluklar nasıl olur? Bunlar da kaldırılmalı mı? bu durumda: str = str.replace (/, \ s * $ /, ""); str = str.replace (/ \ s *, \ s * $ /, "");
Amitabh

Yanıtlar:


393

Bu, son virgülü ve ondan sonraki tüm boşlukları kaldıracaktır:

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

Normal bir ifade kullanır:

  • /İşareti başlangıç ve normal ifadenin uç

  • ,virgül maçları

  • \sAraçlar boşluk karakterleri (boşluk, sekme, vs.) ve *aracı 0 ya da daha fazla

  • $Sonunda dize sonu anlamına


Str.replace (/, + / g, ",") kullanın. Replace (/ (, \ s * $) | (^, *) /, ""); Başlangıçtaki boş virgülü veya çift virgülü kaldırmak isterseniz, örneğin ",, 8,, 7" "8,7" olur
Miguel

@ParkashKumar Jon daha önce bahsetti /. The / mark the beginning and end of the regular expression.
Asif Ali

Çok faydalı teşekkürler.
Alok Ranjan

13

slice () yöntemini kullanarak bir dizeden son virgülü kaldırabilirsiniz, aşağıdaki örneği bulun :

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

İşte bir örnek

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

burada uzun atış

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

Soru zaten cevaplanmış olsa da, çözümünüz ilgimi çekti ve test etmeye karar verdim. Maalesef işe yaramıyor :(
AnaMaria

Bu girişi kullanın "Bu, bir testtir." İdeal olarak çıktı aynı cümle olmalıdır, ancak programınızda bunu "Bu" olarak verir. Haklıysam sorumu +1 olarak işaretleyin. Eğer yanılıyorsam çözümünüzü işaretleyeceğim +1
AnaMaria

http://jsfiddle.net/rpss/3rSNr/ Tüm virgüllerin endeksleri getirilir ve döngüde birbiri ardına değiştirilerek "currentIndex" içine konur (eşleşme modeli için test etme ve bir eşleşme bulunduğunda dizini alma). son olarak bu değişken son virgülün dizini ile bırakılır

:) doğru, bu kod son virgülü kaldıracak, ancak cümlenin sonundaki son virgülün kaldırılmasını

Tam olarak değil. Bu bölümü kaçırdınız "ancak virgül son karakterse veya virgülden sonra yalnızca beyaz boşluk varsa"
AnaMaria

3

Büyük ölçüde olumlu oylanan yanıt, yalnızca son virgülü değil, aynı zamanda izleyen boşlukları da kaldırır. Ancak aşağıdaki boşlukları kaldırmak , asıl sorunun bir parçası değildi . Yani:

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

https://jsfiddle.net/dc8moa3k/


1

Sorun, dizedeki son virgülü kaldırmanızdır, eğer dizedeki son şey ise virgül değil. Bu nedenle, son karakterin ',' olup olmadığını kontrol etmek için bir if koymalı ve öyleyse değiştirmelisiniz.

DÜZENLEME: Gerçekten bu kadar kafa karıştırıcı mı?

'Bu, rastgele bir dizedir'

Kodunuz dizedeki son virgülü bulur ve yalnızca "Bu" yu depolar, çünkü son virgül dizenin sonunda değil "Bu" dan sonra gelir.


9
Cevabınız sorudan daha kafa karıştırıcı. Maalesef acımasızca dürüst olduğu için
AnaMaria

xD bunu çok anlıyorum. Komut dosyanız dizedeki son komayı bulur ve ondan sonraki her şeyi kaldırır. Bu durumda virgül ortadaysa, buradaki gibi 'Bu, bir testtir.' strng.lastIndexOf (",") komutu; 4 döndürür, böylece 5. harften sonraki her şey kaldırılır. Öyleyse, geri kalanını kaldırmadan önce dizenin son harfinin "," olup olmadığını kontrol etmelisiniz :)
Hristo Valkanov

1
Ne demek istediğini anlıyorum ve nerede yanlış yaptığımı anladım. Ama cevabınız yorum olarak daha uygun çünkü bana pek yardımcı olmadı. Umarım söylediğimi anlarsın. Alınma
AnaMaria

Ben de istenirse kod eklemeyi planlıyordum ama kemanla düzenleme yaptıktan sonra zaten mükemmel bir cevap olduğunu gördüm ve öyle bıraktım. :)
Hristo Valkanov

1

son virgülü kaldırabilirsiniz:

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

1

Son virgülü kaldırın. Çalışma örneği

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

İlk olarak, son karakterin virgül olup olmadığı kontrol edilmelidir. Varsa, kaldırın.

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

NOT str.indexOf (',', this.length - ','. Length) str.indexOf (',', this.length - 1) olarak basitleştirilebilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.