私のソース:
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_treat.theora または Task_2.4a_Host_treat ) 領域だけを置き換える必要がありますか? 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
の後のすべてに一致します)。
これを試してください:作業デモ 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])
私はあなたの質問に少し混乱しているので、あなたが何をしようとしているのかわからない. ファイル名を置き換えたい場合は、これを使用します。
var newpath = filepath.replace(/[^/]*(?=\.\w+$)/, 'replacement');
ファイル名を抽出して他のすべてを取り除きたい場合は、これを試してください。
var filename = filepath.replace(/.*\/|\.\w+$/g, '');