2011-05-31 8 views
0

ファイルパスから最後の単語を抽出するためにregexを使いたいと思います。例えば、私が持っている:私はパスのうち、 "" を抽出したいJavascript Regex - 画像へのパスの前に最後の単語を抽出する方法

の.jpg /XYZ/blahblah/ZZZ/ABC-何とか/ DEF-XYZ- 。パスの色は構文が異なります。一貫性のある唯一のことは、いつでも-color.jpgで終わるところです。ここで、colorは任意の[a-z]単語になります。

これを行うにはエレガントな方法がありますか?

本当にありがとうございます。おかげ

+0

になります。一貫しているのは一番最後の-color.jpgです。ここで「色」は抽出したい単語です。そして、色は任意の非数字の単語です。 – David

+0

ねえ、私は、正規表現を使うことが時には良いアイデア(HTMLの解析など)ではないことを知っていますが、時には**このコードのように多くの**を単純化します。あなたが何かを検証するために使用しているツールがあなたに正規表現などを入力させるために必要なものだから)*なぜ正規表現ですか?*または*どうしてそんなに正規表現より優れていないのですか?それほど意味がない場合は? –

答えて

1
var matched = /-(\w+).jpg/i.exec('/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg')[1]; 
+0

ありがとうライアン。これは私のために働き、最短のコードでした。 – David

0

-(\w+)\.jpg 

は?

拡張子をハードコーディングしたくない場合は、あなたが行うことができます。もちろん

-(\w+)\.\w+\b 

、物事の多くを一致しますが、私は一致するテキストがURLになりますと仮定しています;)

編集:
それは二つのグループにマッチします、そしてあなただけ秒1を取る必要があり、その第一のインデックスにだけアクセス:

var text = '/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg'; 
var pattern = /-(\w+)\.\w+\b/; 
var match = pattern.exec(text); 
alert(match[1]); // color 

@Ryanのように1行でやります。

+0

thxしかし、これは私にとってはうまくいかなかった。それは私に2つの文字列 "-color.jpg"と "color"を返しました。 – David

+0

@Davidあなたが与えたことは2つのグループでした:マッチ全体と色だけです。私はそれを編集させてください;) –

+0

Gotcha。オスカーに感謝します。私はライアンを使いましたが、あなたの編集したものは、私のような初心者の方が読みやすいものでした。 – David

0

なぜ正規表現を使用しますか?

var a = '/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg' 
    .split('/').pop() 
    .split('-').pop() 
    .split('.')[0]; 

console.log(a); 
+0

hmmm ..正直言って、私はこの場合正規表現を好むと思います。正規表現を知っているコーダーにとっては、単純な正規表現(この目的のために)を使ってコードを読むことは、それらのすべてのポップや分割よりもきれいで読みやすいでしょう。私はそれがアイデアだということですね。あなたはいつもRegexの使用を避けるためにいくつかの微調整を行うことができます;) –

+0

これは動作します!しかし、これは、間に任意の数の "/"または " - "を持つパスのために動作しますか? – David

+0

@oscar:確かに、余分なオーバーヘッド(ネイティブの文字列関数よりかなり高価です)が発生するため、絶対に必要な場合にのみ正規表現を使用することをお勧めします。また、読みやすさを追求している場合は、複数の行に分割してください。 –

2

なぜ正規表現を使用するのではなく、部分文字列を取ることができますか?

var path=" /xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg"; 
var lastHyphen = path.lastIndexOf("-"); 
var lastDot = path.lastIndexOf("."); 
var extractedValue=path.substring(lastHyphen + 1, lastDot); 

よりコンパクトなバージョンは、私はパスが任意の長さ、任意のサイズで、1つ以上のハイフンを持っていることを明確にしたい

var extractedValue=path.substring(path.lastIndexOf("-") + 1, path.lastIndexOf(".")); 
0

なぜだけではなく、

var path= "/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg"; 
/(?:([^-.]+?)\.[^.]+?$)/i.test(path); 
var color = RegExp.$1; 
alert(color); 
関連する問題