使用正则表达式如何单独替换文件名?

时间:2012-10-22 07:26:34

标签: jquery regex

我的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做到这一点?

3 个答案:

答案 0 :(得分:0)

Working demo.

这个正则表达式将匹配最后一个正斜杠之后的所有内容,捕获其自己组中的扩展名,因此在我们进行替换时可以将其放回原位:

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, '');