Видаліть останню кому з рядка


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, ","). Substitute (/ (, \ 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

Використовуйте цей вхід "Це, є тестом". В ідеалі вихід має бути таким самим реченням, але у вашій програмі він дає це як "Це". Якщо я правий, то позначте моє запитання +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", щоб перевірити, чи є останній знак "," та змінити його, якщо воно є.

EDIT: Це насправді це заплутано?

"Це випадковий рядок"

Ваш код знаходить останню кому з рядка і зберігає лише "Це", тому що остання кома після "Це" не в кінці рядка.


9
Ваша відповідь більш заплутана, ніж питання. Вибачте за жорстоку чесність
AnaMaria

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.