【发布时间】:2011-07-05 11:50:18
【问题描述】:
下面的正则表达式
var patt1=/[0-9a-z]+$/i;
提取字符串的文件扩展名,如
filename-jpg
filename#gif
filename.png
如何修改这个正则表达式以仅在字符串确实是一个以一个点作为分隔符的文件名时返回一个扩展名? (显然 filename#gif 不是常规文件名)
更新基于 tvanofsson 的 cmets,我想澄清一下,当 JS 函数接收到字符串时,该字符串将已经包含一个不带空格且不带点和其他特殊字符的文件名(它实际上将被处理为 @987654323 @)。问题不在于解析文件名,而在于错误地解析了 slug - 当它真正应该返回 null 或空字符串时,该函数返回“jpg”的扩展名,当它被赋予“filename-jpg”时,正是这种行为需要待修正。
【问题讨论】:
-
正则表达式是否必须确定文件名是否为合法文件名?什么定义了合法的文件名?什么定义了合法的文件扩展名?例如,
foo bar.zi_是合法的文件名吗?foo.bar.zi_怎么样? -
典型的操作系统文件名..在我们的系统中不会发生带有空格的示例,@stema 提供的答案似乎适用于双扩展名,所以对我来说已经足够了。
-
这两个例子都是 Unix 和 Windows 中的合法文件名。您可以通过详细说明您认为是合法文件名的内容来改进您的问题。它会给出答案,尤其是。接受的答案对可能希望解决相同或类似问题的未来读者更有意义。
标签: javascript regex