Tengo un stock multilínea. ¿Cómo puedo eliminar una línea específica?
const str = ` import 'C:\Users\Desktop\sanitize.js'; val = ln + '\t'; val += lc + '\t'; val += f + '\t'; val += id + '\t'; // id source val += sc + '\t\n'; `;En este caso, necesito eliminar las líneas donde ocurre la Importación o la solicitud, mientras mantengo los saltos de línea.
Mi enfoque no funciona, porque puede haber un salto de línea dentro de las líneas, y estoy tratando de dividir los saltos de línea por línea para lograr el resultado.
function sanitizeSandbox(code) { let disinfectedSandbox = ''; if (typeof code === 'string' && code.length > 0) { const sandboxSplit = code.split('\n'); for (const str of sandboxSplit) { if (!str.includes('import') && !str.includes('required')) { disinfectedSandbox += `${str}\n`; } } } return disinfectedSandbox; }Valor esperado:
` val = ln + '\t'; val += lc + '\t'; val += f + '\t'; val += id + '\t'; // id source val += sc + '\t\n'; `El valor que obtengo con mi enfoque:
` val = ln + '\t'; val += lc + '\t'; val += f + '\t'; val += id + '\t'; // id source val += sc + '\t \n'; `Puede usar esta expresión regular (derivada de esta respuesta ):
(?:[^\n']|'[^']*')+ para hacer coincidir líneas en su cadena (mientras ignora las líneas nuevas dentro '' ), luego filtre según si la línea contiene import o required :
const str = ` import 'C:\Users\Desktop\sanitize.js'; val = ln + '\t'; val += lc + '\t'; val += f + '\t'; val += id + '\t'; // id source val += sc + '\t\n'; `; result = str.match(/(?:[^\n']|'[^']*')+/g) .filter(l => !l.match(/\b(import|require)\b/)) .join('\n') console.log(result) console.log(JSON.stringify(result))