0

我的来源:

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

4

3 回答 3

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

由于这些字符都不能是 a/并且我们用 将匹配锚定到字符串的末尾,所以$这只会是最后一个斜杠之后的所有内容。请注意,我也包含/在文件扩展名的否定字符类中。否则,您可能会遇到包含句点的目录和没有文件扩展名的文件的问题(test/directory.containing.dots/file因为您将匹配第一个斜杠之后的所有内容)。

于 2012-10-22T07:34:17.007 回答
0

我对你的问题有点困惑,所以我不确定你想做什么。如果要替换文件名,请使用以下命令:

var newpath = filepath.replace(/[^/]*(?=\.\w+$)/, 'replacement');

如果您想提取文件名并删除其他所有内容,请尝试以下操作:

var filename = filepath.replace(/.*\/|\.\w+$/g, '');
于 2012-10-22T07:54:27.607 回答
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])​
于 2012-10-22T07:41:15.220 回答