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

lis*_*aro 17 javascript regex

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

例如:

1.2.3.4
Run Code Online (Sandbox Code Playgroud)

应成为:

123.4
Run Code Online (Sandbox Code Playgroud)

Сух*_*й27 22

您可以使用正面向前的正则表达式,

"1.2.3.4".replace(/[.](?=.*[.])/g, "");
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。用英语说,正则表达式说“匹配所有出现的。后面有另一个。”,然后您只需用空字符串替换即可。您偶尔会听到一些抱怨,称正则表达式不如进行大拆分然后从数组进行格式化那样易读,但是在其上方的注释中简单描述正则表达式是很容易的。 (2认同)

nin*_*cko 11

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)
}
Run Code Online (Sandbox Code Playgroud)

不需要字符串参数的替代版本:

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)
}
Run Code Online (Sandbox Code Playgroud)

演示:

> removeAllButLast('a.b.c.d', '.')
"abc.d"
Run Code Online (Sandbox Code Playgroud)

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

'a.b.c.d'.replace(/(.*)\./, x => x.replace(/\./g,'')+'.')
Run Code Online (Sandbox Code Playgroud)

(如果你的字符串包含换行符,你将不得不使用[.\n]而不是裸体.)

  • 其他信息,如果字符串不包含令牌,则将添加它。 (2认同)

icy*_*com 6

你可以这样做:

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

实例:


Nin*_*olz 5

您可以积极向前看(保留最后一个点,如果有的话)并替换第一个出现的点。

var string = '1.2.3.4';

console.log(string.replace(/\.(?=.*\.)/g, ''));
Run Code Online (Sandbox Code Playgroud)