31 votes

Supprimer toutes les occurrences sauf la dernière ?

Je veux supprimer toutes les occurrences de la sous-chaîne = . dans une chaîne, sauf la dernière.

E.G :

1.2.3.4

devrait devenir :

123.4

44voto

Сухой27 Points 27138

Vous pouvez utiliser une expression rationnelle avec une anticipation positive,

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

16voto

ninjagecko Points 25709

2-liner :

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

Version alternative sans l'exigence de l'argument chaîne :

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)
}

Demo:

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

L'exemple suivant est une expression régulière qui tire parti du fait que la balise * est gourmand, et que le remplacement laissera la chaîne seule si aucune correspondance n'est trouvée. Il fonctionne en faisant correspondre [la chaîne la plus longue incluant des points][point] et en laissant [le reste de la chaîne], et si une correspondance est trouvée, il enlève tous les "." :

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

(Si votre chaîne de caractères contient des sauts de ligne, vous devrez utiliser la commande [.\n] plutôt que nu . s)

7voto

icyrock.com Points 13698

Vous pouvez faire quelque chose comme ça :

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

Exemple concret :

6voto

Nina Scholz Points 17120

Vous pourriez prendre un lookahead positif (pour conserver le dernier point, le cas échéant) et remplacer les premiers points à venir.

var string = '1.2.3.4';

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

1voto

danday74 Points 15895

A replaceAllButLast est plus utile qu'une fonction removeAllButLast fonction. Lorsque vous voulez supprimer, il suffit de remplacer par une chaîne vide :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X