我的src:
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_treated.theora或Task_2.4a_Host_treated)区域?怎么用reg.exp做到这一点?
答案 0 :(得分:0)
这个正则表达式将匹配最后一个正斜杠之后的所有内容,捕获其自己组中的扩展名,因此在我们进行替换时可以将其放回原位:
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
由于这些字符都不能是/
,我们将匹配锚定到字符串末尾$
,这只是最后一次斜杠后的所有内容。请注意,我还在文件扩展名的负字符类中包含了/
。否则,您可能会遇到包含句点和没有文件扩展名的文件的目录的问题(在test/directory.containing.dots/file
中,您将匹配第一个斜杠后的所有内容。)
答案 1 :(得分:0)
试试这个:工作演示 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])
答案 2 :(得分:0)
我对你的问题感到有些困惑,所以我不确定你要做什么。如果要替换文件名,请使用:
var newpath = filepath.replace(/[^/]*(?=\.\w+$)/, 'replacement');
如果要提取文件名并删除其他所有内容,请尝试以下操作:
var filename = filepath.replace(/.*\/|\.\w+$/g, '');