Я хочу удалить все вхождения substring = .
в строку, кроме последней.
например:
1.2.3.4
должен стать:
123.4
Я хочу удалить все вхождения substring = .
в строку, кроме последней.
например:
1.2.3.4
должен стать:
123.4
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)
Вы можете использовать регулярное выражение с положительным взглядом вперед,
"1.2.3.4".replace(/[.](?=.*[.])/g, "");
Вы можете сделать что-то вроде этого:
var str = '1.2.3.4';
var last = str.lastIndexOf('.');
var butLast = str.substring(0, last).replace(/\./g, '');
var res = butLast + str.substring(last);
Пример в реальном времени:
var s = '1.2.3.4';
s=s.split('.');
s.splice(s.length-1,0,'.');
s.join('');
123,4
Вы можете изменить строку, удалить все вхождения подстроки, кроме первой, и отменить ее снова, чтобы получить то, что вы хотите.
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
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
Нашел гораздо лучший способ сделать это. Здесь 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)
Вы можете получить положительный прогноз (для сохранения последней точки, если таковой имеется) и заменить первые ближайшие точки.
var string = '1.2.3.4';
console.log(string.replace(/\.(?=.*\.)/g, ''));