Empecé a estudiar RegexOne, y hay un ejercicio en el que debemos capturar una parte de una cadena hasta el "." , siempre que la cadena termine con .pdf
match file_a_record_file.pdf match file_yesterday.pdf skip testfile_fake.pdf.tmpPero quería profundizar un poco más y capturar esta parte de una cadena, a menos que la cadena contenga más de 3 caracteres después de un carácter de punto "."
Traté de usar
^(\w+(?!([.](.{4,}))$))pero por supuesto que no funcionó. ¿Cómo podría corregir este patrón, considerando la biblioteca JavaScript RegEx? (No quiero una función, solo un patrón, si eso es posible). Supongo que sería más flexible si pudiera evitar usar $, pero aceptaría cualquier respuesta que coincida con la pregunta. Gracias a todos de antemano.
Puede verificar si no hay más de 4 caracteres sin puntos después de un punto.
^(?!.*\.[^\.\n]{4})\w+(?:\.\w+)*$Demostración de expresiones regulares
const regex = /^(?!.*\.[^\.\n]{4})\w+(?:\.\w+)*$/; [ "file_a_record_file.pdf", "file_yesterday.pdf", "testfile_fake.pdf.tmp", "testfile_fake.docx.tmp" ].forEach(s => { console.log((regex.test(s) ? "Match: " : "No match: ") + s); }); Si desea que la parte antes del pdf termine en pdf, puede usar un grupo de captura y hacer coincidir .pdf al final.
^(?!.*\.[^\.\n]{4})(\w+(?:\.\w+)*)\.pdf$Demostración de expresiones regulares
const regex = /^(?!.*\.[^.\n]{4})(\w+(?:\.\w+)*)\.pdf$/; [ "file_a_record_file.pdf", "file_yesterday.pdf", "testfile_fake.pdf.tmp", "testfile_fake.docx.tmp" ].forEach(s => { const m = s.match(regex); if (m) { console.log(m[1]); } });Creo que esto es lo que estás tratando de hacer:
mySting.match(/(.*)\.pdf$/) Match file_a_record_file.pdf Match file_yesterday.pdf null testfile_fake.pdf.tmp Editar: la cadena sin la extensión se almacena en mySting.match(/(.*)\.pdf$/)[1]
Para la coincidencia de 3 caracteres después del primer punto
myString.match(/^([^\.]+)\.[\w]{1,3}$/);Explicación: haga coincidir todo lo que no sea un punto + haga coincidir el primer punto + haga coincidir una palabra que contenga de 1 a 3 caracteres al final de la cadena