Xóa Dấu phẩy cuối cùng khỏi chuỗi


139

Sử dụng JavaScript, làm cách nào tôi có thể xóa dấu phẩy cuối cùng, nhưng chỉ khi dấu phẩy là ký tự cuối cùng hoặc nếu chỉ có khoảng trắng sau dấu phẩy? Đây là mã của tôi. Tôi có một fiddle làm việc . Nhưng nó có một lỗi.

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

Nó cũng nên loại bỏ khoảng trống ở cuối?
Felix Kling

nếu chỉ có không gian trống, có
AnaMaria

Làm thế nào về bất kỳ không gian trước dấu phẩy trong câu hỏi? Những cái đó cũng nên được loại bỏ? trong trường hợp này: str = str.replace (/, \ s * $ /, ""); sẽ trở thành str = str.replace (/ \ s *, \ s * $ /, "");
Amitabh

Câu trả lời:


390

Điều này sẽ xóa dấu phẩy cuối cùng và bất kỳ khoảng trắng nào sau nó:

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

Nó sử dụng một biểu thức chính quy:

  • Các /dấu sự khởi đầu và kết thúc của biểu thức chính quy

  • Các ,dấu phẩy

  • \snghĩa là các ký tự khoảng trắng (dấu cách, tab, v.v.) và *phương tiện 0 trở lên

  • Cuối $ở cuối biểu thị sự kết thúc của chuỗi


Sử dụng str.replace (/, + / g, ","). Thay thế (/ (, \ s * $) | (^, *) /, ""); nếu bạn muốn xóa dấu phẩy trống ban đầu hoặc, dấu phẩy kép, ví dụ ",, 8, 7" sẽ trở thành "8,7"
Miguel

@ParkashKumar Jon đã đề cập đến cuối cùng /. The / mark the beginning and end of the regular expression.
Asif Ali

Rất hữu ích Cảm ơn.
Alok Ranjan

13

bạn có thể xóa dấu phẩy cuối cùng khỏi chuỗi bằng cách sử dụng phương thức lát (), tìm ví dụ dưới đây :

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

Đây là một ví dụ

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

bắn dài ở đây

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

Mặc dù câu hỏi đã được trả lời, tôi bị thu hút bởi giải pháp của bạn và quyết định kiểm tra. Thật không may, nó không hoạt động :(
AnaMaria

Sử dụng đầu vào này "Đây, là một thử nghiệm." Lý tưởng nhất là đầu ra phải là cùng một câu nhưng trong chương trình của bạn, nó cho nó là "Cái này". Nếu tôi đúng thì đánh dấu câu hỏi của tôi +1. Nếu tôi sai tôi sẽ đánh dấu giải pháp của bạn +1
AnaMaria

http://jsfiddle.net/rpss/3rSNr/ Tất cả các chỉ số của dấu phẩy được tìm nạp và đưa vào "current Index" thay thế từng cái trong vòng lặp (tìm kiếm mẫu phù hợp và tìm nạp chỉ mục khi tìm thấy kết quả khớp). cuối cùng biến đó được để lại với chỉ mục của dấu phẩy cuối cùng

:) đúng, mã đó sẽ xóa dấu phẩy cuối cùng, nhưng bạn muốn dấu phẩy cuối ở cuối câu bị xóa, ở đó..có .. câu hỏi của bạn được đánh dấu +1

Không chính xác. Bạn đã bỏ lỡ phần này "nhưng chỉ khi dấu phẩy là ký tự cuối cùng hoặc nếu chỉ có khoảng trắng sau dấu phẩy"
AnaMaria

3

Câu trả lời được nâng cấp rất nhiều sẽ loại bỏ không chỉ dấu phẩy cuối cùng mà còn bất kỳ khoảng trắng nào tiếp theo. Nhưng loại bỏ những không gian sau đây không phải là một phần của vấn đề ban đầu. Vì thế:

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

https://jsfiddle.net/dc8moa3k/


1

Vấn đề là bạn loại bỏ dấu phẩy cuối cùng trong chuỗi chứ không phải dấu phẩy nếu đó là điều cuối cùng trong chuỗi. Vì vậy, bạn nên đặt một if để kiểm tra nếu char cuối cùng là ',' và thay đổi nó nếu có.

EDIT: Có thực sự khó hiểu?

'Đây, là một chuỗi ngẫu nhiên'

Mã của bạn tìm thấy dấu phẩy cuối cùng từ chuỗi và chỉ lưu trữ 'This,' bởi vì, dấu phẩy cuối cùng nằm sau 'This' không ở cuối chuỗi.


9
Câu trả lời của bạn khó hiểu hơn câu hỏi. Xin lỗi vì đã trung thực một cách tàn nhẫn
AnaMaria

xD tôi nhận được rất nhiều. Kịch bản của bạn tìm thấy trạng thái hôn mê cuối cùng trong chuỗi và loại bỏ mọi thứ sau nó. Trong trường hợp đó, nếu dấu phẩy ở giữa như trong phần này 'Đây, là một bài kiểm tra.' lệnh strng.lastIndexOf (","); sẽ trả về 4, do đó loại bỏ mọi thứ sau chữ thứ 5. Vì vậy, bạn phải kiểm tra xem "," có phải là chữ cái cuối cùng của chuỗi không trước khi xóa phần còn lại :)
Hristo Valkanov

1
tôi hiểu ý của bạn và tôi đã hiểu sai ở đâu. Nhưng bạn trả lời phù hợp hơn là một nhận xét vì nó không giúp tôi nhiều. Hy vọng bạn nhận được những gì tôi đang nói. Không xúc phạm
AnaMaria

Tôi đã dự định thêm mã nếu được yêu cầu nhưng khi chỉnh sửa trong fiddle tôi thấy rằng đã có một câu trả lời hoàn hảo nên tôi đã để nó như thế. :)
Hristo Valkanov

1

bạn có thể xóa dấu phẩy cuối cùng:

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

1

Xóa dấu phẩy cuối cùng. Ví dụ làm việc

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

Đầu tiên, người ta nên kiểm tra xem ký tự cuối cùng có phải là dấu phẩy không. Nếu nó tồn tại, loại bỏ nó.

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

LƯU Ý str.indexOf (',', this.length - ','. Length) có thể được đơn giản hóa thành str.indexOf (',', this.length - 1)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.