Подтвердить что ты не робот

Удалить все вхождения, кроме последнего?

Я хочу удалить все вхождения substring = . в строку, кроме последней.

например:

1.2.3.4

должен стать:

123.4
4b9b3361

Ответ 1

2-вкладыш:

function removeAllButLast(string, token) {
    /* Requires STRING not contain TOKEN */
    var parts = string.split(token);
    return parts.slice(0,-1).join('') + token + parts.slice(-1)
}

Альтернативная версия без требования для строкового аргумента:

function removeAllButLast(string, token) {
    var parts = string.split(token);
    if (parts[1]===undefined)
        return string;
    else
        return parts.slice(0,-1).join('') + token + parts.slice(-1)
}

Демо:

> removeAllButLast('a.b.c.d', '.')
"abc.d"

Следующий однострочный шрифт - это регулярное выражение, которое использует тот факт, что символ * является жадным, и эта замена оставляет строку одной, если совпадение не найдено. Он работает, сопоставляя [длинную строку, включая точки] [точка], и оставляя [остальную часть строки], и если совпадение найдено, оно разделяет все ". от него:

'a.b.c.d'.replace(/(.*)\./, x => x.replace(/\./g,'')+'.')

(Если ваша строка содержит символы новой строки, вам нужно будет использовать [.\n], а не голый . s)

Ответ 2

Вы можете использовать регулярное выражение с положительным взглядом вперед,

"1.2.3.4".replace(/[.](?=.*[.])/g, "");

Ответ 3

Вы можете сделать что-то вроде этого:

var str = '1.2.3.4';
var last = str.lastIndexOf('.');
var butLast = str.substring(0, last).replace(/\./g, '');
var res = butLast + str.substring(last);

Пример в реальном времени:

Ответ 4

var s = '1.2.3.4';

s=s.split('.');
s.splice(s.length-1,0,'.');
s.join('');

123,4

Ответ 5

Вы можете изменить строку, удалить все вхождения подстроки, кроме первой, и отменить ее снова, чтобы получить то, что вы хотите.

Ответ 6

function formatString() {
  var arr = ('1.2.3.4').split('.');
  var arrLen = arr.length-1;
  var outputString = '.' + arr[arrLen];
  for (var i=arr.length-2; i >= 0; i--) {
     outputString = arr[i]+outputString;
  }
  alert(outputString);
}

Смотрите здесь: http://jsbin.com/izebay

Ответ 7

Функция

A replaceAllButLast более полезна, чем функция removeAllButLast. Если вы хотите удалить только замену пустой строкой:

function replaceAllButLast(str, pOld, pNew) {
  var parts = str.split(pOld)
  if (parts.length === 1) return str
  return parts.slice(0, -1).join(pNew) + pOld + parts.slice(-1)
}

var test = 'hello there hello there hello there'
test = replaceAllButLast(test, ' there', '')

console.log(test) // hello hello hello there

Ответ 8

Нашел гораздо лучший способ сделать это. Здесь replaceAllButLast и appendAllButLast, как и должно быть сделано. Последний выполняет замену, сохраняя исходное совпадение. Чтобы удалить, просто замените пустую строку.

var str = "hello there hello there hello there"

function replaceAllButLast(str, regex, replace) {
  var reg = new RegExp(regex, 'g')
  return str.replace(reg, function(match, offset, str) {
      var follow = str.slice(offset);
      var isLast = follow.match(reg).length == 1;
      return (isLast) ? match : replace
  })
}

function appendAllButLast(str, regex, append) {
  var reg = new RegExp(regex, 'g')
  return str.replace(reg, function(match, offset, str) {
      var follow = str.slice(offset);
      var isLast = follow.match(reg).length == 1;
      return (isLast) ? match : match + append
  })
}

var replaced = replaceAllButLast(str, / there/, ' world')
console.log(replaced)

var appended = appendAllButLast(str, / there/, ' fred')
console.log(appended)

Ответ 9

Вы можете получить положительный прогноз (для сохранения последней точки, если таковой имеется) и заменить первые ближайшие точки.

var string = '1.2.3.4';

console.log(string.replace(/\.(?=.*\.)/g, ''));