存在する場合、URLからファイル名を取得する正規表現を作成しようとしています。
これは私がこれまでに持っているものです:
(?:[^/][\d\w\.]+)+$
したがって、URLから、http://www.foo.com/bar/baz/filename.jpg
一致する必要がありますfilename.jpg
残念ながら、最後の/
.
ファイル名のように見える場合にのみ取得できるようにするにはどうすればよいですか?
存在する場合、URLからファイル名を取得する正規表現を作成しようとしています。
これは私がこれまでに持っているものです:
(?:[^/][\d\w\.]+)+$
したがって、URLから、http://www.foo.com/bar/baz/filename.jpg
一致する必要がありますfilename.jpg
残念ながら、最後の/
.
ファイル名のように見える場合にのみ取得できるようにするにはどうすればよいですか?
上記の例では、次の URL からファイル名「file-1.name.zip」を取得できません。
"http://sub.domain.com/sub/sub/handler?file=data/file-1.name.zip&v=1"
そこで、REGEX バージョンを作成しました。
[^/\\&\?]+\.\w{3,4}(?=([\?&].*$|$))
説明:
[^/\\&\?]+ # file name - group of chars without URL delimiters
\.\w{3,4} # file extension - 3 or 4 word chars
(?=([\?&].*$|$)) # positive lookahead to ensure that file name is at the end of string or there is some QueryString parameters, that needs to be ignored
非プリクレ
(?:[^/][\d\w\.]+)$(?<=\.\w{3,4})
プクレ
(?:[^/][\d\w\.]+)$(?<=(?:.jpg)|(?:.pdf)|(?:.gif)|(?:.jpeg)|(more_extension))
regexpal.com
javascript に基づいている (後読みをサポートしていない) を使用してテストするので、代わりにこれを試してください。
(?=\w+\.\w{3,4}$).+
(?:.+\/)(.+)
最後のスラッシュ (/) までをすべて選択し、このスラッシュ以降をすべてキャプチャします。サブパターン $1 を使用します。
私はこれを使用しています:
(?<=\/)[^\/\?#]+(?=[^\/]*$)
説明:
(?<=): 文字列にこの式が含まれているが、一致していないことを主張する肯定的な後読み。
(?<=/): リテラル スラッシュ "/" の肯定的な後読み。これは、前にあるがスラッシュと一致しない式を探していることを意味します。
[^/\?#]+: 「/」でも「?」でもない 1 つ以上の文字 または「#」、検索パラメーターとハッシュを削除します。
(?=[^/]*$): スラッシュに一致しないものを前向きに見てから、行末に一致します。これは、最後のスラッシュ セグメントが確実に選択されるようにするためです。
使用例:
const urlFileNameRegEx = /(?<=\/)[^\/\?#]+(?=[^\/]*$)/;
const testCases = [
"https://developer.mozilla.org/en-US/docs/Web/API/MutationObserverInit#yo",
"https://developer.mozilla.org/static/fonts/locales/ZillaSlab-Regular.subset.bbc33fb47cf6.woff2",
"https://developer.mozilla.org/static/build/styles/locale-en-US.520ecdcaef8c.css?is-nice=true"
];
testCases.forEach(testStr => console.log(`The file of ${testStr} is ${urlFileNameRegEx.exec(testStr)[0]}`))
それもうまくいくかもしれません:
(\w+\.)+\w+$
区切り文字がどのように見えるかを知っているので、正規表現は必要ありません。ちょうどsplit
文字列。言語について言及していないので、Perl での実装を次に示します。
use strict;
use warnings;
my $url = "http://www.foo.com/bar/baz/filename.jpg";
my @url_parts = split/\//,$url;
my $filename = $url_parts[-1];
if(index($filename,".") > 0 )
{
print "It appears as though we have a filename of $filename.\n";
}
else
{
print "It seems as though the end of the URL ($filename) is not a filename.\n";
}
もちろん、特定のファイル拡張子 (png、jpg、html など) を気にする必要がある場合は、適切に調整してください。
JavaScript を使用すると仮定すると、次のようになります。
var fn=window.location.href.match(/([^/])+/g);
fn = fn[fn.length-1]; // get the last element of the array
alert(fn.substring(0,fn.indexOf('.')));//alerts the filename
> echo "http://www.foo.com/bar/baz/filename.jpg" | sed 's/.*\/\([^\/]*\..*\)$/\1/g'
filename.jpg
代わりにこれを試してください:
(?:[^/]*+)$(?<=\..*)