Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

80
Vistas
Replacing a JavaScript string in the last occurrence of two tildes ~~

I have a String which looks like this:

Mon Jan 24 2022 09:28:10 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~00-Entwurf~~15-Indirekter Einkauf~~~~
Mon Jan 24 2022 09:28:20 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~00-Entwurf~~15-Indirekter Einkauf~~~~
Tue Jan 25 2022 20:51:17 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~15-Indirekter Einkauf~~15-Indirekter Einkauf~~Comment 1~~
Tue Jan 25 2022 20:58:34 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~15-Indirekter Einkauf~~15-Indirekter Einkauf~~Comment 2~~

What I'm struggling with is the following:

Between the last occurrence of tildes (~~) we have Comment 2. I want to replace that value with another value, for instance Comment 3.

My solution would be this: https://jsfiddle.net/13wrpa2b/

alert(str[19]) // Comment 2

str[19] = "Comment 3"; 

let concat = str.join('~~');
alert(concat);

The problem with that is that I don't always know the exact length of the log and the comment does not necessarily have to be in the 19th place. But I do know that it will always be between the last occurrence of tildes ~~.

How can I achieve that?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Because there are two tildes at the end of the string the array will look like [..., "Comment 2", ""]. Therefore the item is in the second to last position so instead of using 19 you can use str.length - 2.

let str = 'Mon Jan 24 2022 09:28:10 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~00-Entwurf~~15-Indirekter Einkauf~~~~ Mon Jan 24 2022 09:28:20 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~00-Entwurf~~15-Indirekter Einkauf~~~~ Tue Jan 25 2022 20:51:17 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~15-Indirekter Einkauf~~15-Indirekter Einkauf~~Comment 1~~ Tue Jan 25 2022 20:58:34 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~15-Indirekter Einkauf~~15-Indirekter Einkauf~~Comment 2~~'.split('~~')

console.log(str[str.length - 2]) // Comment 2

str[str.length - 2] = "Comment 3"; 

let concat = str.join('~~');
console.log(concat);

about 4 years ago · Juan Pablo Isaza Denunciar

0

You can try the following:

const arr = logentry.split('~~');
arr[arr.length-2] = 'My custom stuff'; // this is now the last block in the line
const updatedLine = arr.join('~~'));
alert(updatedLine);
about 4 years ago · Juan Pablo Isaza Denunciar

0

You can use the regex: /(?<=~~)[^~]+(?=~~$)/gm

This creates a lookbehind and lookahead for words at the end of the line wrapped by two tildes ~~

(If you want the last in the whole string instead of last in the line, remove the gm at the end)

const regex = /(?<=~~)[^~]+(?=~~$)/gm;

const str = `
log: Mon Jan 24 2022 09:28:10 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~00-Entwurf~~15-Indirekter Einkauf~~~~
Mon Jan 24 2022 09:28:20 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~00-Entwurf~~15-Indirekter Einkauf~~~~
Tue Jan 25 2022 20:51:17 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~15-Indirekter Einkauf~~15-Indirekter Einkauf~~Comment 1~~
Tue Jan 25 2022 20:58:34 GMT+0100 (Mitteleuropäische Normalzeit)~~Admin_SA, SharePoint (i:0#.w|xespsa)~~15-Indirekter Einkauf~~15-Indirekter Einkauf~~Comment 2~~
`;

console.log(str.match(regex))
console.log(str.replace(regex, 'replacement'))


Of course, you can even choose the replacement based on the selection with:

str.replace(regex, selection => selection == 'Comment 2' ? 'Comment 3' : 'Comment 4')

Extending this with the case of incrementing the number (in case you need to):

str.replace(regex, selection => selection.replace(/\d+/, n => +n+1))
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda