Quiero obtener una expresión regular para reemplazar todos los comentarios de línea para bloquear comentarios, pero quiero devolver solo comentarios js legales y no // eso es parte de una cadena por lo que tengo que detectar si // está entre comillas y no reemplazarlo .
Ahora obtuve algo como esto /"(.*?\/\/.*?)"/ , pero reemplaza lo contrario: todos // entre comillas y no los que no.
// Change heading:debe coincidir
document.getElementById("myH").innerHTML = "My First //Page";no debería coincidir
document.getElementById("myP").innerHTML = "My first paragraph."; // Change paragraph:;debe coincidir
console.log("some important info //shouldn't replace"); // this is important infoEn este caso, el comentario válido debería coincidir, pero no el comentario entre comillas.
Haga coincidir los comentarios con /(?:(?=["'][^"']*$)|(?=^[^"']*\/\/.*$))(.*?)\/\/(.*)/gm y reemplácelo con $1/*$2*/ .
let code = `// Change heading: document.getElementById("myH").innerHTML = "My First Page"; document.getElementById("myP").innerHTML = "My first paragraph."; // Change paragraph: console.log("some important info //shouldn't replace"); // this is important info console.log('some important info //should not replace'); // this is important info`; code = code.replace(/(?:(?=["'][^"']*$)|(?=^[^"']*\/\/.*$))(.*?)\/\/(.*)/gm, "$1/*$2*/"); console.log(code);