Poniżej regexJavaScript regex rozszerzenia dopasowywania plików/wydobywania
var patt1=/[0-9a-z]+$/i;
wydobywa rozszerzenie pliku ciągów takich jak
filename-jpg
filename#gif
filename.png
Jak zmodyfikować tego wyrażenia regularnego, aby zwrócić tylko rozszerzenie gdy ciąg naprawdę to nazwa pliku z jedną kropką jako separatorem? (Oczywiście nazwa pliku # gif nie jest zwykłą nazwą pliku)
AKTUALIZACJA Na podstawie komentarzy Tvanofsson chciałbym wyjaśnić, że gdy funkcja JS odbiera ciąg znaków, ciąg znaków będzie już zawierał nazwę pliku bez spacji bez kropek i innych znaków specjalnych znaków (w rzeczywistości będzie obsługiwany jako slug
). Problem polegał nie na parsowaniu nazw plików, ale na niewłaściwym analizowaniu wtyczek - funkcja zwracała rozszerzenie "jpg", gdy podano "filename-jpg", kiedy powinien naprawdę powrócić null
lub pusty ciąg znaków i to jest to zachowanie, które musiało być poprawione.
Czy wyrażenie regularne musi określać, czy nazwa pliku jest poprawną nazwą pliku? Co definiuje legalną nazwę pliku? Co definiuje prawne rozszerzenie pliku? Na przykład jest 'foo bar.zi_' jest legalną nazwą pliku? Co powiesz na 'foo.bar.zi_'? – tvanfosson
Typowa nazwa pliku systemu operacyjnego. Twój przykład z zawartością w nim nie może się zdarzyć w naszym systemie, a odpowiedź udzielona przez @stema wydaje się działać z podwójnymi rozszerzeniami, więc jest wystarczająco dobra dla mnie. – mare
Oba przykłady są legalnymi nazwami plików w systemach Unix i Windows. Twoje pytanie może zostać poprawione poprzez dokładne wyszczególnienie tego, co uważasz za legalną nazwę pliku. To sprawi, że odpowiedzi, szczególnie. zaakceptowana odpowiedź ma większe znaczenie dla przyszłych czytelników, którzy mogą chcieć rozwiązać ten sam lub podobny problem. – tvanfosson