2016-05-05 11 views
-4

jpgまたはpngまたはgifで終わるsrc属性をすべて一致させ、src文字列を内部で抽出しようとしています。私が思いついた次の正規表現が正しいかどうかはわかりませんが、アドレスにsrc属性を与えます。私の質問は、次の正規表現の可能性のある問題とどのように私はsrc文字列だけを抽出することができます。正規表現を抽出する正規表現

/src\s*=\s*(["'][^"']+(jpg|png|gif)\b)/g; 
+0

コードレビューを求めているので、この質問を議論の対象外とすることにしました。 [この姉妹サイト](http://codereview.stackexchange.com/help/on-topic)のオントピック(編集後)です。 – Quentin

+0

なぜ人々は投票していますか?私の質問を言い換えることができるように私に教えてください? – sawa

+0

私は、コードレビューを尋ねることと、私がよく熟知していないプログラミング問題について質問することとの明確な区別は見当たりません。 – sawa

答えて

1

まず、あなたの正規表現はあまりにも多くをやろうとしています。まず、次のようなやり方から始めてください:

function img_find() { 
    var imgs = document.getElementsByTagName("img"); 
    var imgSrcs = []; 

    for (var i = 0; i < imgs.length; i++) { 
     imgSrcs.push(imgs[i].src); 
    } 

    return imgSrcs; 
} 

ここで、あなたの正規表現の扱いはずっと少ないです。 (ように空白、二重引用符対シングル、そしてません。)

生のHTMLを解析するための正規表現を使用しようとthisを読んでください、とんではない(非常にシンプルな状況を除く):)

ので、与えられました拡張子なし、

/(jpg|png|gif)$)/i; 

そして、そのファイル名をつかむ:イメージソースの配列は、あなただけjpg/png/gifものを選択する必要があります(これを行うには多くの方法がありますが、ここではただ一つのことです私は一緒に投げた...)

/(.*)\.[^.]+)/; 
+0

あなたの説明をありがとう。私が正規表現を使用している理由は、画像タグを解析することができないjavascriptコードに埋め込まれた画像リンクを収集しようとしていることです。私は正規表現の構文に慣れていないので、始めに 'src'にマッチした後にどうやってアドレス部分だけを抽出できるのかまだ分かりません。これが基本と関係していると確信していますが、これについて私に説明してください。 – sawa

+0

'イメージタグのためにjavascriptコードを解析できません。 ' - はい、できます。正規表現は、空白、単一対二重引用符などの前述の問題のために、この問題に対する正しい答えではありません。私が示唆したように、画像ソースを取得するためにDOMを使用してください。 *次に、正規表現を使用します。すべての純粋な正規表現のソリューションは、厄介なエッジケースのバグを持ち、読んで理解することは非常に困難です。 –

+0

もし私のアドバイスを完全に無視したいのであれば、 '/src\s*=\s*(["'''()^[']+)\.(jpg|png|gif)\b)/g; 'であり、2番目の一致グループにはファイル名が含まれます。しかし、私が言っているように、これは間違っている可能性がある百の方法があります...例えば、 'thisisnota.png.exe'というファイルはどうですか?または、ユニコードの引用符(https://www.ccl.ac.uk/~mgk25/ucs/quotes.html)を使用するとどうなりますか?あるいは、ファイルの名前がfile_with_a _'_ character.png "'の場合はどうなりますか? .....私が示唆したように正しく行った場合、これらの事柄のどれも問題にはならない。 –