从字符串末尾删除最后一个逗号(以及最后一个逗号后可能的空格)

使用 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;
}
258617 次浏览

问题在于,删除字符串中最后一个逗号时,如果它是字符串中的最后一个内容,则不删除逗号。因此,您应该放置一个 if 来检查最后一个字符是否为’,如果为’则更改它。

编辑: 真的有那么令人困惑吗?

这是一个随机的字符串

您的代码从字符串中找到最后一个逗号,并且只存储“ This”,因为最后一个逗号在“ This”之后,而不是在字符串的末尾。

这将删除最后一个逗号和之后的所有空格:

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

它使用一个正则表达式:

  • /标记正则表达式的开始和结束

  • ,符合逗号

  • \s表示空格字符(空格、制表符等) ,*表示0或更多

  • 字符串末尾的 $表示字符串的结束

function removeLastComma(str) {
return str.replace(/,(\s+)?$/, '');
}

希望渺茫

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

你可以使用 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>

你可以去掉最后一个逗号:

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

删除最后一个逗号

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>

这个经过大量修正的答案不仅删除了最后一个逗号,还删除了后面的所有空格。但是去掉下面这些空格是 没有,这是最初问题的一部分。所以:

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

Https://jsfiddle.net/dc8moa3k/

首先,应该检查最后一个字符是否是逗号。 如果它存在,移除它。

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

注意 str.indexOf (’,’,this.length-’,’. length)可以简化为 str.indexOf (’,’,this.length-1)

万一有用或更好的方法:

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

它将替换字符串的所有以下组合结尾:

1. ,<no space>
2. ,<spaces>
3. ,  ,  , ,   ,
4. <spaces>
5. <spaces>,
6. <spaces>,<spaces>

不管有没有正则表达式。

我建议采用两种方法,同时也考虑删除空间。今天我遇到了这个问题,我通过编写下面的代码解决了这个问题。

我希望这个代码可以帮助其他人。

//With the help of Regex
var str = "        I am in Pakistan, I am in India, I am in Japan,     ";
var newstr = str.replace(/[, ]+$/, "").trim();
console.log(newstr);




//Without Regex
function removeSpaceAndLastComa(str) {
var newstr = str.trim();
var tabId = newstr.split(",");
strAry = [];
tabId.forEach(function(i, e) {
if (i != "") {
strAry.push(i);
}
})
console.log(strAry.join(","));
}


removeSpaceAndLastComa(str);

如果您的目标是 es6,那么您可以简单地这样做

str = Array.from( str ).splice(0, str.length - 1).join('');
  • 这个 Array.from(str)将字符串转换为数组(这样我们就可以对它进行切片)

  • 这个 splice( 0 , str.length - 1 )返回一个数组,其中除了数组中的最后一个项之外,数组中的项按顺序排列

  • 这个 join('')连接数组中的条目以形成一个字符串

然后,如果希望确保在执行操作之前逗号实际结束字符串,可以执行以下操作

str = str.endsWith(',') ? Array.from(str).splice(0,str.length - 1).join('') : str;

要从字符串中删除最后一个逗号,您需要

text.replace(/,(?=[^,]*$)/, '')
text.replace(/,(?![^,]*,)/, '')

参见 正则表达式演示:

  • ,(?=[^,]*$)-一个逗号,后面紧跟任意零个或多个字符,除了一个逗号直到字符串结束。
  • ,(?![^,]*,)-一个逗号,除了一个逗号和另一个逗号之外,它后面不会立即跟有任何零个或更多个字符。

查看 JavaScript 演示:

const text = '1,This is a test, and this is another,  ...';
console.log(text.replace(/,(?=[^,]*$)/, ''));
console.log(text.replace(/,(?![^,]*,)/, ''));

删除最后的空格和逗号,

var str = "Hello TecAdmin, ";
str = str.trim().replace(/,(?![^,]*,)/, '')
// Output
"Hello TecAdmin"