删除除最后一次以外的所有事件

时间:2012-03-14 01:58:33

标签: javascript

我想删除除最后一个字符串之外的所有字符串substring = .

E.G:

1.2.3.4

应该成为:

123.4

9 个答案:

答案 0 :(得分:15)

你可以使用正面预测的正则表达式,

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

答案 1 :(得分:10)

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"

以下单行是一个正则表达式,它利用*字符贪婪的事实,并且如果找不到匹配,则replace将保留字符串。它通过匹配[包括点的最长字符串] [点]并留下[字符串的其余部分]来工作,如果找到匹配,则从中删除所有'。':

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

(如果您的字符串包含换行符,则必须使用[.\n]而非裸.

答案 2 :(得分:5)

您可以这样做:

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

实例:

答案 3 :(得分:1)

var s ='1.2.3.4';

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

<强> 123.4

答案 4 :(得分:1)

找到了一种更好的方法。这里应该replaceAllButLastappendAllButLast。后者在保留原始匹配的同时进行替换。要删除,只需用空字符串替换。

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

答案 5 :(得分:1)

你可以采取积极的预测(保留最后一个点,如果有的话)并替换第一个出现的点。

&#13;
&#13;
var string = '1.2.3.4';

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

答案 6 :(得分:0)

您可以反转字符串,删除除第一个之外的所有子字符串,然后再将其反转以获得所需的字符串。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

相关问题