Cómo cambiar este tt /* a */ pp /* b */ dd
a
tt dd
esto no incluye el enlace a y b
var test = "tt /* a */ pp /* b */ dd"; // expected: var res = "tt dd";
¿Es simple con expresiones regulares?
Si desea eliminar algo entre dos cosas, incluidas esas cosas, regex podría hacer el truco con bastante facilidad:
const str = 'tt /* a */ pp /* b */ dd'; const start = '/\\* a \\*/'; const end = '/\\* b \\*/'; const pattern = new RegExp(`${start}.*${end}`, 'g'); const result = str.replace(pattern, ''); console.log(pattern); console.log(result);
Sin embargo, hay dos trampas.
El primero es de su elección de delimitador. Dado que tiene un *
, que tiene un significado especial en expresiones regulares, debe asegurarse de escapar de él. Si elige un delimitador sin caracteres especiales para expresiones regulares, no tiene que hacerlo.
El otro problema no es tanto un problema como un problema de requisitos. Quería tt dd
, pero obtendrá tt dd
como lo describe (dos espacios), ya que ambos espacios están fuera de sus delimitadores.
Hay un par de maneras de lidiar con eso. Uno podría ser simplemente reemplazar dos o más espacios con un espacio:
const str = 'tt dd'; const result = str.replace(/\s+/g, ' '); console.log(result);
Si tt
y dd
varían, aquí hay una expresión regular que elimina lo que hay entre esas variaciones:
const re = /\s+.*\/\s+/gm; let str = `tt /* a */ pp /* b */ dd`; str = str.replace(re,' '); console.log(str); // tt dd // Change tt and dd to aa and bb, instead, for example: str = `aa /* a */ pp /* b */ bb`; str = str.replace(re,' '); console.log(str); // aa bb
Si tt
y dd
no varían, no veo el sentido de usar una expresión regular; simplemente establecería (estáticamente) esa cadena en el valor deseado.