Quiero usar expresiones regulares para detectar todos los caracteres de nueva línea (\ n) que los usuarios colocan por error. Por ejemplo
# abcd abcd abcd abcd efgh efgh efgh efgh ## ijk ijk ijk ijk ijk ijk lmn lmn lmn # opq opq opq opq rst rst rest rstPara ser corregido a lo siguiente
# abcd abcd abcd abcd efgh efgh efgh efgh ## ijk ijk ijk ijk ijk ijk lmn lmn lmn #opq opq opq opq rst rst rest rstEstoy tratando de usar esta cadena de expresiones regulares:
\s*\n+[\s]*[^#]+ para ser reemplazado por "" (cadena en blanco)
es decir. Encuentra un carácter \n que
\n no debe tener un # después. P.ej. \n # . Porque # siempre debe comenzar una nueva línea, y si # también se incluye y se reemplaza por "" , comenzará a aparecer en la misma línea que la anterior.La respuesta después de reemplazar con \n es esta, que no se desea:
# abcd abcd abcd abcdfgh efgh efgh efgh## ijk ijk ijk ijk ijk ijkmn lmn lmn# opq opq opq opqst rst rest rst¿Cómo puedo mejorar mi cadena de expresiones regulares y la cadena de reemplazo para obtener lo que necesito como resultado?
Puede usar esta expresión regular:
(?:\s*\n)+\s*(?!\s*#)|^\s+|[ \t]*$Código:
const s = `# abcd abcd abcd abcd efgh efgh efgh efgh ## ijk ijk ijk ijk ijk ijk lmn lmn lmn # opq opq opq opq rst rst rest rst `; var r = s.replace(/(?:\s*\n)+\s*(?!\s*#)|^\s+|[ \t]*$/mg, ''); console.log(r);Puedes probar con eso:
^[ \t]*([#]+[^\n]+)\n[ \t]*([^#\n]+.*?)\ny reemplaza por esto:
$1$2 const regex = /^[ \t]*([#]+[^\n]*?)[ \t]*\n[ \t]*([^#\n]+.*?)\n/gm; const str = `# abcd abcd abcd abcd efgh efgh efgh efgh ## ijk ijk ijk ijk ijk ijk lmn lmn lmn # opq opq opq opq rst rst #rest rst `; const subst = `$1$2`; const result = str.replace(regex, subst); console.log(result);