我的来源:
Video/webm/Task_2.4a_Host_treated.webm
Video/ogv/Task_2.4a_Host_treated.theora.ogv
Video/MP4/Task_2.4a_Host_treated.mp4
我需要单独更换(Task_2.4a_Host_treatment.theora 或 Task_2.4a_Host_treatment )区域吗?如何使用 reg.exp 做到这一点?
这个正则表达式将匹配最后一个正斜杠之后的所有内容,在它自己的组中捕获扩展名,因此当我们进行替换时可以将其放回原处:
var regex = /\/[^/]*?(\.[^/.]*)?$/mg;
$1
现在您可以使用(其中指的是捕获的组,即文件扩展名)进行替换:
str = str.replace(regex, '/whatyouwanttohaveinstead$1');
请注意,我使用m
修饰符来打开多行模式。由于这$
匹配每一行的结尾(除了字符串的结尾)。
正则表达式各部分的一些解释:
\/ # matches a literal slash
[^/]* # matches arbitrarily many non-slash characters
? # makes the previous repetition ungreedy, so it does not consume the
# file extension if there is one
( # starts a capturing group, which can be accessed later with $1
\. # matches a literal period
[^/.]* # matches as many non-period/non-slash characters as possible
) # closes the capturing group
? # makes the file extension optional
$ # matches the end of the string, and due to the "m" modifier later
# the end of every line
由于这些字符都不能是 a/
并且我们用 将匹配锚定到字符串的末尾,所以$
这只会是最后一个斜杠之后的所有内容。请注意,我也包含/
在文件扩展名的否定字符类中。否则,您可能会遇到包含句点的目录和没有文件扩展名的文件的问题(test/directory.containing.dots/file
因为您将匹配第一个斜杠之后的所有内容)。
我对你的问题有点困惑,所以我不确定你想做什么。如果要替换文件名,请使用以下命令:
var newpath = filepath.replace(/[^/]*(?=\.\w+$)/, 'replacement');
如果您想提取文件名并删除其他所有内容,请尝试以下操作:
var filename = filepath.replace(/.*\/|\.\w+$/g, '');
试试这个:工作演示 http://jsfiddle.net/Xnzmd/ 或 http://jsfiddle.net/Etbyg/1/
希望它适合原因:)
代码
var file = "Video/ogv/Task_2.4a_Host_treated.theora.ogv";
extension = file.match(/\.[^.]+$/);
filename = file.match(/(.*)\.[^.]+$/);
alert('extention = '+extension);
alert('Filename = ' + filename[1])