正規表現を削除するにはファイルの拡張子
-
10-07-2019 - |
質問
私を必要とする正規表現を取り外し可能な拡張子のファイル名を返しだけファイルの名前.
詳しくご紹介しますの入出力:
myfile.png -> myfile
myfile.png.jpg -> myfile.png
まで明らかなこともできます(ieの除去からの最後の恐竜がいがあることが保証された正規表現できることによりそのものです。
ちなみに、私はこのJavaScript
解決
/(.*)\.[^.]+$/
結果は、最初のキャプチャグループになります。ただし、正規表現を使用せずに、右端のピリオドの位置を見つけて、その前にあるすべてのものを取得する方がおそらく効率的です。
他のヒント
完全を期すために:正規表現なしでこれをどのように達成できますか?
var input = 'myfile.png';
var output = input.substr(0, input.lastIndexOf('.')) || input;
|| input
がケースを処理します。 lastIndexOf()
は -1
を提供します。ほら、それはまだワンライナーです。
/^(.+)(\.[^ .]+)?$/
これが機能し、他が失敗するテストケース:
- " .htaccess" (先行期間)
- " file" (ファイル拡張子なし)
- "ミセスに送信" (拡張子はありませんが、略語で終わります。)
- "プロジェクトのバージョン1.2" (拡張子はありませんが、まだピリオドが含まれています)
もちろん、上記の共通のスレッドは「不正な形式」です。ファイル拡張子。しかし、あなたは常にこれらのコーナーケースについて考える必要があります。 :P
これが失敗するテストケース:
- "バージョン1.2" (ファイル拡張子はありませんが、"が表示されます"があります)
- " name.tar.gz" (これを" compound extension"と見なし、" name"と" tar.gz"に分割したい場合)
これらの処理方法は問題が多く、プロジェクトごとに決定するのが最適です。
パターンに一致する正規表現は次のとおりです。
/\.[^.]*$/
ピリオド文字( \。)の後に、ピリオドではない0個以上の文字( [^。] * )が続き、その後に文字列( $ )。
console.log(
"aaa.bbb.ccc".replace(/\.[^.]*$/,'')
)
/^(.+)(\.[^ .]+)?$/
上記のパターンは間違いでは常にに拡張す。でどのようにjavascriptの正規表現エンジンです。の (\.[^ .]+)
トークンはオプションで、エンジンを成功に一致文字列全体と (.+)
http://cl.ly/image/3G1I3h3M2Q0M
ここでの私の正規表現の試験溶液とする。
このパターンに一致filenameNoExt/なし延長の経路を尊重し、両方のスラッシュとバックスラッシュセパレータ
var path = "c:\some.path/subfolder/file.ext"
var m = path.match(/([^:\\/]*?)(?:\.([^ :\\/.]*))?$/)
var fileName = (m === null)? "" : m[0]
var fileExt = (m === null)? "" : m[1]
解剖のパターン:
([^:\\/]*?) // match any character, except slashes and colon, 0-or-more times,
// make the token non-greedy so that the regex engine
// will try to match the next token (the file extension)
// capture the file name token to subpattern \1
(?:\. // match the '.' but don't capture it
([^ :\\/.]*) // match file extension
// ensure that the last element of the path is matched by prohibiting slashes
// capture the file extension token to subpattern \2
)?$ // the whole file extension is optional
http://cl.ly/image/3t3N413g3K09
http://www.gethifi.com/tools/regex
このバーは全例で言及されたよ@RogerPateものを含むフルパスも
別の正規表現なしの方法(@Rahulの" oposite"バージョン、pop()を使用せずに削除)
変数を2回参照する必要がないため、インライン化が容易です
filename.split('.').slice(0,-1).join()
これも同様に行います:)
'myfile.png.jpg'.split('.').reverse().slice(1).reverse().join('.');
ただし、正規表現に固執します... = P
return filename.split('.').pop();
それはあなたの願いを叶えます。しかし、正規表現ではありません。
javascriptでは、正規表現に基づいて置換するReplace()メソッドを呼び出すことができます。
この正規表現は、行の先頭から末尾までのすべてに一致し、ピリオドを含む最後のピリオド以降のすべてを削除します。
/^(.*)\..*$/
置換の実装方法は、このStackoverflowの質問に記載されています。