Estoy usando Firefox y probé esto con el nodo v14 y v17. Estoy tratando de analizar una cadena en una fecha:
const extractThreadDate = (page: string): Date => { const $ = cheerio.load(page) const posthead = $("div .posthead") const postdate = $(".postdate", posthead) // format: 25/01/2010, 12:37 const textDate = postdate.first().text().trim() console.log("1", textDate) const [dayDate, hourDate] = textDate.split(", ") console.log("2", [dayDate, hourDate]) const [day, month, year] = dayDate.split("/").map(s => Number(s)) console.log("3", [day, month, year]) const [hour, minute] = hourDate.split(":").map(s => Number(s)) console.log("4", [hour, minute]) const date = new Date(year, month, day, hour, minute) return date }Sin embargo, los registros muestran lo siguiente:
1 25/01/2010, 12:37 2 [ '25/01/2010, 12:37', undefined ] 3 [ 25, 1, NaN ]¿Alguna pista?
Puede expresar todos los espacios en blanco usando /\s/g en JavaScript, por lo que para que coincida con esto, podría hacer .split(/,\s/g) en lugar de apuntar a caracteres de espacio en blanco arbitrarios/específicos.
Entonces, hice una verificación de cordura y noté que "25/01/2010, 12:37".split(", ") funciona correctamente por sí mismo. Extrañado, puse un fs.writeFileSync("hehehehe", textDate) . Resulta que había un carácter \u00a0 en lugar de un espacio. Asombroso. ¿Quién pensó que sería una buena idea tener otro espacio en blanco? Lo que sea, eso fue todo, split(",\u00a0") funciona bien.
La razón por la que funcionó es que cuando lo copia en el portapapeles, aparentemente se convierte en un espacio en blanco normal.