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

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
источник
Должен ли он также удалить пробелы в конце?
Феликс Клинг
если это только пустое место, да
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>

е-techpulse
источник
9
function removeLastComma(str) {
   return str.replace(/,(\s+)?$/, '');   
}
Дэниел Слооф
источник
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)

Макс Александр Ханна
источник