ลบ Last Comma ออกจากสตริง


147

การใช้ JavaScript ฉันจะลบเครื่องหมายจุลภาคสุดท้ายได้อย่างไร แต่ถ้าลูกน้ำเป็นอักขระสุดท้ายหรือมีช่องว่างหลังเครื่องหมายจุลภาคเท่านั้น นี่คือรหัสของฉัน ฉันมีซอที่ใช้งานได้ แต่มันมีจุดบกพร่อง

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

ควรลบช่องว่างตอนท้ายด้วยหรือไม่?
Felix Kling

ถ้าเป็นช่องว่างเท่านั้นใช่
AnaMaria

ช่องว่างก่อนเครื่องหมายจุลภาคเป็นอย่างไร ควรเอาออกด้วยหรือไม่? ในกรณีนี้: str = str.replace (/, \ s * $ /, ""); จะกลายเป็น str = str.replace (/ \ s *, \ s * $ /, "");
Amitabh

คำตอบ:


411

การดำเนินการนี้จะลบเครื่องหมายจุลภาคสุดท้ายและช่องว่างใด ๆ หลังจากนั้น:

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

ใช้นิพจน์ทั่วไป:

  • /เครื่องหมายจุดเริ่มต้นและจุดสิ้นสุดของการแสดงออกปกติ

  • ,ตรงจุลภาค

  • \sหมายถึงช่องว่างของตัวละคร (ช่องว่าง, แท็บ ฯลฯ ) และ*วิธีการที่ 0 หรือมากกว่า

  • $ในตอนท้ายถึงการสิ้นสุดของสตริง


ใช้ str.replace (/, + / g, ",") แทนที่ (/ (, \ s * $) | (^, *) /, ""); หากคุณต้องการลบเครื่องหมายจุลภาคว่างเริ่มต้นหรือลูกน้ำคู่เช่น ",, 8, 7" จะกลายเป็น "8,7"
มิเกล

@ParkashKumar Jon ได้พูดถึงเรื่องสุดท้าย/แล้ว The / mark the beginning and end of the regular expression.
Asif Ali

มีประโยชน์มากขอบคุณ
Alok Ranjan

15

คุณสามารถลบเครื่องหมายจุลภาคสุดท้ายออกจากสตริงโดยใช้เมธอด slice () ค้นหาตัวอย่างด้านล่าง:

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

นี่คือตัวอย่าง

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

ยิงยาวที่นี่

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

แม้ว่าคำถามจะได้รับคำตอบแล้ว แต่ฉันรู้สึกทึ่งกับการแก้ปัญหาของคุณและตัดสินใจที่จะทดสอบ น่าเสียดายที่มันไม่ทำงาน :(
AnaMaria

ใช้อินพุตนี้ "นี่คือการทดสอบ" ตามหลักการแล้วผลลัพธ์ควรเป็นประโยคเดียวกัน แต่ในโปรแกรมของคุณจะให้เป็น "This" ถ้าฉันพูดถูกก็ให้ทำเครื่องหมาย +1 ถ้าฉันผิดฉันจะทำเครื่องหมายวิธีแก้ปัญหาของคุณ +1
AnaMaria

http://jsfiddle.net/rpss/3rSNr/ ดัชนีของลูกน้ำทั้งหมดจะถูกดึงออกมาและใส่ลงใน "currentIndex" โดยแทนที่ค่าหนึ่งตามหลังในลูป (การทดสอบรูปแบบการจับคู่และการดึงดัชนีเมื่อพบการจับคู่) ในที่สุดตัวแปรนั้นจะเหลือเพียงดัชนีของลูกน้ำตัวสุดท้าย

:) จริงรหัสนั้นจะลบเครื่องหมายจุลภาคตัวสุดท้าย แต่คุณต้องการให้ลบเครื่องหมายจุลภาคสุดท้ายที่ท้ายประโยคตรงนั้น .. คำถามของคุณมีเครื่องหมาย +1

ไม่ตรง คุณพลาดส่วนนี้ไป "แต่เฉพาะในกรณีที่เครื่องหมายจุลภาคเป็นอักขระสุดท้ายหรือมีช่องว่างหลังเครื่องหมายจุลภาคเท่านั้น"
AnaMaria

3

คำตอบที่ได้รับการโหวตอย่างมากไม่เพียง แต่ลบเครื่องหมายจุลภาคสุดท้ายเท่านั้น แต่ยังรวมถึงช่องว่างที่ตามมา แต่การลบช่องว่างต่อไปนี้ไม่ได้เป็นส่วนหนึ่งของปัญหาเดิม ดังนั้น:

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

https://jsfiddle.net/dc8moa3k/


1

ปัญหาคือคุณลบลูกน้ำสุดท้ายในสตริงไม่ใช่ลูกน้ำหากเป็นสิ่งสุดท้ายในสตริง ดังนั้นคุณควรใส่ if เพื่อตรวจสอบว่าถ่านสุดท้ายเป็น ',' หรือไม่และเปลี่ยนถ้าเป็น

แก้ไข: มันสับสนจริงๆเหรอ?

'นี่คือสตริงแบบสุ่ม'

โค้ดของคุณค้นหาเครื่องหมายจุลภาคสุดท้ายจากสตริงและเก็บเฉพาะ "นี่" เนื่องจากเครื่องหมายจุลภาคสุดท้ายอยู่หลัง "นี่" ไม่อยู่ท้ายสตริง


9
คำตอบของคุณสับสนมากกว่าคำถาม ขออภัยในความซื่อสัตย์อย่างไร้ความปราณี
AnaMaria

xD ฉันเข้าใจมาก สคริปต์ของคุณค้นหาอาการโคม่าสุดท้ายในสตริงและลบทุกอย่างหลังจากนั้น ในกรณีนั้นถ้าลูกน้ำอยู่ตรงกลางเช่นนี้ 'นี่คือการทดสอบ' คำสั่ง strng.lastIndexOf (","); จะส่งคืน 4 ดังนั้นจึงลบทุกอย่างหลังจากอักษรตัวที่ 5 ดังนั้นคุณต้องตรวจสอบว่า "," เป็นอักษรตัวสุดท้ายของสตริงหรือไม่ก่อนที่จะลบส่วนที่เหลือออก :)
Hristo Valkanov

1
ฉันเข้าใจว่าคุณหมายถึงอะไรและฉันเข้าใจผิด แต่คุณตอบเหมาะกว่าเป็นความคิดเห็นเพราะมันไม่ได้ช่วยอะไรฉันมาก หวังว่าคุณจะได้รับสิ่งที่ฉันพูด ไม่มีความผิด
AnaMaria

ฉันวางแผนที่จะเพิ่มโค้ดด้วยหากมีการร้องขอ แต่เมื่อแก้ไขในซอฉันเห็นว่ามีคำตอบที่สมบูรณ์แบบอยู่แล้วฉันจึงปล่อยมันไว้อย่างนั้น :)
Hristo Valkanov


1

ลบเครื่องหมายจุลภาคสุดท้าย ตัวอย่างการทำงาน

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

ขั้นแรกควรตรวจสอบว่าอักขระสุดท้ายเป็นเครื่องหมายจุลภาคหรือไม่ หากมีอยู่ให้ลบออก

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

หมายเหตุ str.indexOf (',', this.length - ','. length) สามารถย่อเป็น str.indexOf (',', this.length - 1)


0

เผื่อว่าจะมีประโยชน์หรือวิธีที่ดีกว่า:

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

มันจะแทนที่จุดสิ้นสุดของสตริงต่อไปนี้ทั้งหมด:

1. ,<no space>
2. ,<spaces> 
3. ,  ,  , ,   ,
4. <spaces>
5. <spaces>,
6. <spaces>,<spaces>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.