从字符串中删除最后一个逗号


139

使用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)

Answers:


391

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

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

它使用一个正则表达式:

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

  • ,逗号匹配

  • \s装置的空白字符(空格,制表符,等),和*装置0以上

  • $在最后表示该字符串的结尾


使用str.replace(/,+ / g,“,”)。replace(/(,\ s * $)|(^,*)/,“”); 如果要删除初始的空逗号或​​双逗号,则示例“ ,, 8,,7”将变为“ 8,7”
Miguel

@ParkashKumar Jon已经提到了最后一个/The / mark the beginning and end of the regular expression
阿西夫·阿里

非常有用,谢谢。
Alok Ranjan

13

您可以使用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”中,从而在循环中一个接一个地替换(测试匹配模式并在找到匹配项时获取索引)。最后,该变量保留最后一个逗号的索引

:)是的,该代码将删除最后一个逗号,但是您希望删除句子末尾的最后一个逗号,.. there ..您的问题被标记为+1

不完全是。您错过了这一部分“但仅当逗号是最后一个字符或逗号后仅空格时”
AnaMaria

3

强烈支持的答案不仅删除了最后的逗号,还删除了后面的空格。但是删除这些空格并不是原来问题的一部分。所以:

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

https://jsfiddle.net/dc8moa3k/


1

问题是您删除了字符串中的最后一个逗号,而不是逗号(如果它是字符串中的最后一个东西)。因此,您应该放置一个if来检查最后一个字符是否为',',如果是则进行更改。

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

“这是一个随机字符串”

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


9
您的答案比问题更令人困惑。抱歉,我很残酷
AnaMaria

xD我得到很多。您的脚本会找到字符串中的最后一个逗号,并删除其后的所有内容。在这种情况下,如果逗号在中间,例如“ This,is a test”。命令strng.lastIndexOf(“,”); 将返回4,因此删除第5个字母之后的所有内容。因此,在删除其余字符之前,您必须检查“,”是否为字符串的最后一个字母:)
Hristo Valkanov

1
我明白你的意思,我明白我要去哪里了。但是您的回答更适合作为评论,因为它对我没有多大帮助。希望你明白我的意思。没有冒犯
AnaMaria

我还计划根据需要添加代码,但是在小提琴中进行编辑时,我发现已经有了一个完美的答案,所以我就这样保留了它。:)
Hristo Valkanov

1

您可以删除最后一个逗号:

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

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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.