【发布时间】:2012-03-14 01:58:32
【问题描述】:
我想删除字符串中所有出现的 substring = .,除了最后一个。
例如:
1.2.3.4
应该变成:
123.4
【问题讨论】:
标签: javascript regex
我想删除字符串中所有出现的 substring = .,除了最后一个。
例如:
1.2.3.4
应该变成:
123.4
【问题讨论】:
标签: javascript regex
您可以使用正则表达式积极向前看,
"1.2.3.4".replace(/[.](?=.*[.])/g, "");
【讨论】:
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)
【讨论】:
你可以这样做:
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 string = '1.2.3.4';
console.log(string.replace(/\.(?=.*\.)/g, ''));
【讨论】:
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)
感谢@leaf 为他提供的这些杰作here。
【讨论】:
您可以反转字符串,删除除第一个之外的所有子字符串,然后再次反转它以获得您想要的。
【讨论】:
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
【讨论】:
var s='1.2.3.4';
s=s.split('.');
s.splice(s.length-1,0,'.');
s.join('');
123.4
【讨论】: