Удалить последнюю запятую из строки


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

Должен ли он также удалить пробелы в конце?
Феликс Клинг

если это только пустое место, да
AnaMaria

Как насчет пробелов перед запятой? Должны ли они быть удалены? в этом случае: str = str.replace (/, \ s * $ /, ""); станет str = str.replace (/ \ s *, \ s * $ /, "");
Амитабх

Ответы:


391

Это удалит последнюю запятую и все пробелы после нее:

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

Он использует регулярное выражение:

  • /Отмечают начало и конец регулярного выражения

  • ,Совпадает с запятой

  • Эти \sсредства пробельных символов (пробел, табуляция, и т.д.) , а также *означает 0 или более

  • В $конце означает конец строки


Используйте str.replace (/, + / g, ","). Replace (/ (, \ s * $) | (^, *) /, ""); если вы хотите удалить начальную пустую запятую или двойная запятая, например, ",, 8, 7" станет "8,7"
Мигель

@ParkashKumar Джон уже упоминал о последнем /. The / mark the beginning and end of the regular expression,
Асиф Али

Очень полезно Спасибо.
Алок Ранджан

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. Если я ошибаюсь, я
отмечу

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
Ваш ответ сбивает с толку больше, чем вопрос. Извините за
жесткую

xD Я часто это понимаю. Ваш скрипт находит последнюю строку в строке и удаляет все после нее. В том случае, если запятая находится посередине, как в этом: «Это тест». команда strng.lastIndexOf (","); вернет 4, удалив все после 5-й буквы. Таким образом, вы должны проверить, является ли "," последней буквой строки, прежде чем удалять остальные :)
Христо Валканов

1
Я понимаю, что ты имеешь в виду, и я понял, где ошибся. Но ваш ответ больше подходит в качестве комментария, так как он мне не очень помог. Надеюсь, вы понимаете, что я говорю. Без обид
AnaMaria

Я планировал добавить код тоже, если бы его попросили, но после редактирования в скрипке я увидел, что уже был идеальный ответ, поэтому я оставил его таким. :)
Христо Валканов

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)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.