Hola a todos perdon si el titulo no esta bien pero no se como ponerlo jaja, mi primer post!
explicación : ¡Tengo un código javascript en un archivo y quiero ponerlo como texto en una matriz! también aviso, estoy usando React-ts
Básicamente el archivo js:
console.log('test me') const data = 'my data' const numbData = 1233 const myObj = {data: 123123} const myArr = ['ewqeqw', '132312'] function myFunc(param) { console.log(param) } myFunc('testFunc')Lo que probé:
const [updated, setUpdate] = useState<boolean>(false); const [file, setFile] = useState(); const areaRef = useRef<HTMLTextAreaElement | null>(null); const codeRef = useRef<HTMLParagraphElement | null>(null); const reader = new FileReader(); function handleChange(event: any) { setFile(event.target.files[0]); } reader.addEventListener('loadend', function () { document.getElementById('newText').innerHTML = reader.result; setUpdate(true); }); if (file) { reader.readAsText(file); } if (updated) { let data = codeRef.current?.innerText; let bodyTextArray = data?.split(/(\n)/); console.log(data); console.log(bodyTextArray); }Lo que obtengo : resultado del registro de la consola
lo que quiero :
["console.log('test me')", "const data = 'my data'", "const numbData = 1233", "const myObj = {data: 123123}", "const myArr = ['ewqeqw', '132312']", "function myFunc(param) { console.log(param) }", "myFunc('testFunc')" ]Básicamente, cada pieza de código (declaración de variable, funciones...) por sí sola.
¡Gracias y cualquier solución sería apreciada!
No hay necesidad de usar expresiones regulares en la función split . Simplemente puede hacer esto:
let bodyTextArray = data?.split('\n');Será mucho más fácil si coloca cada declaración en una sola línea (incluida su función myFunc ). Entonces puedes simplemente dividir en nuevas líneas:
function splitLines (input: string, skipEmpty = true): string[] { const lines: string[] = []; // split on regular or windows new lines for (const line of input.trim().split(/\r?\n/)) { // if the line is empty, skip it if (skipEmpty && !line.trim()) continue; lines.push(line); } return lines; } const text = ` console.log('test me') const data = 'my data' const numbData = 1233 const myObj = {data: 123123} const myArr = ['ewqeqw', '132312'] function myFunc(param) { console.log(param) } myFunc('testFunc') `; console.log(splitLines(text));JS compilado del patio de juegos de TS:
"use strict"; function splitLines(input, skipEmpty = true) { const lines = []; // split on regular or windows new lines for (const line of input.trim().split(/\r?\n/)) { // if the line is empty, skip it if (skipEmpty && !line.trim()) continue; lines.push(line); } return lines; } const text = ` console.log('test me') const data = 'my data' const numbData = 1233 const myObj = {data: 123123} const myArr = ['ewqeqw', '132312'] function myFunc(param) { console.log(param) } myFunc('testFunc') `; console.log(splitLines(text));Si no coloca cada declaración en una línea, tendrá que escribir su propia lógica para determinar dónde comienza y termina cada "parte de su código" en la cadena, y dividir en esa lógica.