Tengo una línea de datos como esta:
1•#00DDDD•deeppink•1•100•true•25•100•Random\nTopics•1,2,3,0•false en un archivo de texto.
Específicamente, para mi "problema", estoy usando Random\nTopics como un dato de texto, y luego busco '\n' y divido el mensaje en dos líneas según la ubicación de '\n'.
Está almacenado en blockObj.msg, y lo busco usando blockObj.msg.split('\n') , pero seguí obteniendo una matriz de 1 (sin divisiones). Pensé que estaba haciendo algo fundamentalmente incorrecto y pasé más de una hora resolviendo problemas, hasta que, por capricho, intenté
blockObj.msg = blockObj.msg.replace(/\\n/g, "\n")
y eso pareció resolver el problema. ¿Alguna idea de por qué es necesario esto? Mi solución funciona, pero no tengo idea de por qué, y me gustaría entender mejor para no tener que pasar tanto tiempo buscando una respuesta tan extraña como esta.
Tengo un error similar al leer "texto" de un campo de texto de entrada. Si escribo un '\n' en el cuadro, la división no lo encontrará, pero usar un reemplazo funciona (el reemplazo parece inútil, pero aparentemente no lo es...)
obj.msg = document.getElementById('textTextField').value.replace(/\\n/g, "\n")
Lo siento si esto es confuso, usuario desde hace mucho tiempo de la lectura de soluciones, es la primera vez que publica una pregunta. ¡Gracias por tu tiempo y paciencia!
PD Si es posible... ¿hay alguna manera de hacer lo contrario? ¿Reemplazar un "\n" real con un "\n" falso? (Me gustaría tener mi archivo de datos generado dinámicamente para tener un "\n" en lugar de una nueva línea)
Está almacenado en blockObj.msg, y lo busco usando
blockObj.msg.split('\n'),
En un literal de cadena de JavaScript, \n es una secuencia de escape que representa una nueva línea, por lo que está dividiendo los datos en nuevas líneas.
Sin embargo, los datos que tiene no tienen nuevas líneas. Tiene caracteres de barra seguidos de n caracteres. Son datos, no secuencias de escape.
Su llamada a replace ( blockObj.msg = blockObj.msg.replace(/\\n/g, "\n") ) soluciona esto al reemplazar las barras inclinadas y ns con nuevas líneas.
Sin embargo, ese es un enfoque demasiado complicado. Puedes unir los personajes que tienes directamente. blockObj.msg.split('\\n')
en tu archivo de texto
1•#00DDDD•deeppink•1•100•true•25•100•Random\nTopics•1,2,3,0•false
significa que hay caracteres que son \ y n , así es como se almacenan, pero para insertar un new line character por reemplazo, entonces está buscando el par de caracteres \ y n .
obj.msg = document.getElementById('textTextField').value.replace(/\\n/g, "\n") cuando haces el replace(/\\n/g, "\n")
está buscando \\n , esta es la versión escapada de la cadena, lo que significa que el reemplazo debe encontrar todas las cadenas que son \n , pero para buscar eso, primero debe escapar a \\n
/\\n/g es la cadena de expresiones regulares... \n es el valor... entonces /\REGEXSTUFFHERE/g el último / es seguido por banderas de expresiones regulares, por lo que g en /g sería una búsqueda global