• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

106
Vistas
Filtrado de archivos en el directorio con regex.match usando Puppeteer

Tengo problemas con regex.match que no coincide con los nombres de archivo que sí coinciden cuando los pruebo individualmente en un verificador en línea https://regex101.com

¿Alguien puede detectar el problema en el código a continuación?

P: ¿Debería usar expresiones regulares? prueba en lugar de partido? En caso afirmativo, ¿cómo creo la expresión regular cuando contiene variables?

Debe coincidir con todos los archivos que comienzan con: ES_(Stay) True - Lars Eriksson

Lista de archivos y directorios en la ruta encontrada por fs.readdirSync:

 .DS_Store ES_(Stay) True - Lars Eriksson (22).mp3 ES_(Stay) True - Lars Eriksson (22).mp3.crdownload ES_(Stay) True - Lars Eriksson.mp3 ES_(Stay) True - Lars Eriksson.mp3.crdownload Other - File (22).mp3 Other - File (22).mp3.crdownload Other - File.crdownload Other - File.mp3 originals

La expresión regular se convierte en:

 /^(ES_\(Stay\) True - Lars Eriksson(?: \([0-9]+\))?.mp3(?:.crdownload?)?)$/

Guión de titiritero:

 const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { function escapeRegex(string) { return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } let path = '/path/to/files/'; let title = 'ES_(Stay) True'; let artist = 'Lars Eriksson'; title = escapeRegex(title); artist = escapeRegex(artist); let regex = `/^(${title} - ${artist}(?: \\([0-9]+\\))?\.mp3(?:\.crdownload?)?)$/`; console.log(regex); fs.readdirSync(path) .filter(f => { regex.match(); }) .map(f => { console.log(f); }); })();
almost 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Creo que para convertir una cadena a expresiones regulares, debe usar RegExp() , no solo usarlo como cadena, por ejemplo

 let regex = new RegExp(`^(${title} - ${artist}(?: \\([0-9]+\\))?\.mp3(?:\.crdownload?)?)$`, 'gi'); console.log(regex);
  • también se usa regex.match() ¿qué esperas que coincida cuando no hay nada que coincida? Estás tratando de hacer coincidir la expresión regular con nada que debería ser
 f.match(regex)

tu codigo deberia ser asi

 const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { function escapeRegex(string) { return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } let path = '/path/to/files/'; let title = 'ES_(Stay) True'; let artist = 'Lars Eriksson'; title = escapeRegex(title); artist = escapeRegex(artist); let regex = new RegExp(`^(${title} - ${artist}(?: \\([0-9]+\\))?\.mp3(?:\.crdownload?)?)$`, 'gi'); console.log(regex); let file = fs.readdirSync(path), matched = file.filter(f => f.match(regex)) console.log(matched) })();

Resultado

 0: "ES_(Stay) True - Lars Eriksson (22).mp3" 1: "ES_(Stay) True - Lars Eriksson (22).mp3.crdownload" 2: "ES_(Stay) True - Lars Eriksson.mp3" 3: "ES_(Stay) True - Lars Eriksson.mp3.crdownload"
almost 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda