• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jqueryの正規表現について。)

jQueryの正規表現について分からない点があります

このQ&Aのポイント
  • 最近始めたjQuery初心者ですが、画像をロールオーバーした時に画像のファイル名を変える方法について質問です。
  • $(this).hover(function(){ $(this).attr('src', $(this).attr('src').replace(/^(.+)(\.[a-zA-Z]+)$/, '$1_on$2')); });
  • 正規表現の部分で、末尾の拡張子の前に「_on」を追加するようになっていますが、例えば「gnav_01.png」の場合、ファイル名の「1」と「.」の間に「_on」が挿入されます。具体的な説明を教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • ixkaito
  • ベストアンサー率69% (18/26)
回答No.3

>最初の$1の部分はバックスラッシュを入れればドットが文字として認識されるという事ですかね されますが、それで何をやろうとしているのかは意味不明。 この処理でやろうとしていることは、拡張子を抜いたファイル名の後ろに"_on"を追加したファイル名に置き換えることです。順を追って解釈していきます。 ^(.+) 意味:先頭から(=「^」)、任意の文字が(=「.」)、1個以上続く(=「+」)。 どこまでかというと、次の検索条件までですので、次を見ないとわかりませんが、 ここでは先に言っておきます、質問では「gnav_01」にあたります。 (\.[a-zA-Z]+)$ 意味:正規表現の記号ではなく、文字としてのドット(=「\.」)の後ろに任意のアルファベットが(=「[a-zA-Z]」)、1個以上(=「+」)、末尾まで(=「$」)続く。 質問では「.png」にあたります。 そして、正規表現でカッコをつけることによって、置換えで「$数字」を使ってその部分を再利用できるようにしています。数字はカッコの順番になります。 "$1_on$2" 意味:1つ目のカッコの中身(=「$1」)の後ろに「_on」をつけて、その後ろに2つ目のカッコの中身(=「$2」)をつける。質問では「gnav_01」の後ろに「_on」をつけて、「.png」をつけて、「gnav_01_on.png」の出来上がりです。 ポイント:正規表現での1つ目のドットは任意の文字を意味する記号、2つ目のドットはエスケープ(=「\」)された文字としてのドットです。

tmctmc
質問者

お礼

新年から丁寧な解説本当にありがとうございますm(_ _)m大変詳しく説明して頂いて助かります。これを機にもっと正規表現を詳しく理解して使えるように、頑張りたいと思いますm(_ _)m

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.2

$1(.[ドット]) 違います。$1に入っているのは「(.+)」で表される「任意の文字が1個以上任意の個数」です。 $2(.[アルファベッド]) これは何を言いたいのか分かりません。$2に入っているのは「.(ドット)の後にアルファベットが1個以上任意の個数」です。 質問を見る限り正規表現を全く理解していないようですので、勝手な解釈をせずきちんと正規表現の解説サイトなど見ることをお勧めします。

tmctmc
質問者

お礼

明けましておめでとうございます。 新年から返答本当にありがとうございますm(_ _)m 一応サイトを参考にしたのですが、まだままだ勉強不足を感じますT_T最初の$1の部分はバックスラッシュを入れればドットが文字として認識されるという事ですかね( ? _ ? )

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4854/10269)
回答No.1

/^(.+)(\.[a-zA-Z]+)$/ ドット \. は2つめの括弧の中なので、$2 に含まれます。$2の先頭がドット。$1 はドットの直前までです。 つまり、ドットの直前に _on が入ります。

tmctmc
質問者

お礼

単純に間の中に入るのだと思っていました。 ありがとうございますm(_ _)m

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • jQuery 記述方法

    今、webサイトを作っていてjQueryを使用しようとしています。 しかし、うまくできません。外部にjavascriptファイルを置いています。 やりたいことは、ナビゲーションのロールオーバーです。 javascriptは初心者なのでどこが間違っているまたは足りないのかわかりません。以下に必要だと思うものを記述しますので分かる方がおりましたら教えてください。 javascriptファイルとjquery-1.6.4.min.jsはhtmlと同フォルダ内にあります。またimgフォルダ内に画像と拡張子の前に_onを付けた画像を入れています。 HTML <head> <script type="text/javascript" src="./jquery-1.6.4.min.js"></script> <script type="text/javascript" src="park.js"></script> </head> <body> <p><a href="index.html"> <img alt="top" height="50" class="navi" src="img/top.gif" width="100" /></a></p> </body> javascript $(function(){ $ ("img.navi").mouseover(function(){ $(this).attr("src",$(this).attr("src") .replace(/^(.+)(¥.{a-z]+)$/,"$1_on$2")); }).mouseout(function(){ $(this).attr("src",$(this).attr("src") .replace(/^(.+)_on(¥.{a-z]+)$/,"$1$2")); }).each(function(){ $("<img>").attr("src",$(this).attr("src") .replace(/^(.+)(¥.{a-z]+)$/,"$1_on$2")); }); ]); です。 よろしくお願いします。

  • jQuery class要素を盛り込むには

    画像をマウスオーバーで変化させるコードを、こちらで教えていただいたアドバイスに従って以下の内容で行っています。 $(function(){ $('span img').hover(function(){ $(this).attr('src', $(this).attr('src').replace('.jpg', 'x.jpg')); }, function(){ if (!$(this).hasClass('currentPage')) { $(this).attr('src', $(this).attr('src').replace('x.jpg', '.jpg')); } }); }); BODY部分は、 <SPAN><IMG src="画像.jpg"></SPAN> となっています。 けれど、よくよく考えると、マウスオーバーしたくない画像でも<SPAN>の中に記述していたらコードの影響をうけて、存在しない(マウスオーバー後の)画像を読み込もうとしてしまいます。 基本的な質問で申し訳ないのですが、 区別するため、例えば、マウスオーバーさせたい<SPAN>にはclass要素を入れて、 <SPAN class="change"><IMG src="画像.jpg"></SPAN> としたとして、上記のコードの、 $('span img').hover(function(){ の辺りをどうにか変えればいいように思うのですがよくわかりません。 基本的すぎて申し訳ありませんが、よろしくお願いします。

  • jqueryのロールオーバーについて

    jqueryのロールオーバー設定に関してご質問です。 あるサイトのコーディングを行ってます。 サイト内のナビーゲーションボタンを瓶の画像でまとめてます。 各瓶の画像にリンクを付け、 マウスを乗せるとその瓶が開いた画像が 切り替わりでフェードインの感じで出てくるという設定を目指しているのですが、 うまくいきません。 色々やった結果マウスを当てると、 切り替わりで空いた瓶がフェードで出るのですが、 その画像奥に閉じた瓶がそのまま残ってて重なってる感じです。 こちらはどのようにすれば上手く画像奥の瓶は消えるのでしょうか? ちなみに画像はpngです。 フェードの切り替わりは是非そのまま使用したいと考えてます。 あとマウスを外せばまた閉じた瓶がフェードで出るという感じを目指してます。 どなたかご教示いただいてもよろしいでしょうか? 一応下記htmlとjsコードも載せておきます。 ▼html <script src="../lib/jquery1.8.1.min.js"></script> <script src="../js/jquery.tgImageRollover.js"></script> <script type="text/javascript"> jQuery(function(){ $(this).tgImageRollover({ selector : 'img.rollover', // セレクタ ←(7) attach : '_on', // ファイル名末尾句 ←(8) onFadeTime : 600, // カーソルON時のアニメーション時間 ←(9) offFadeTime : 400 // カーソルOFF時のアニメーション時間 ←(10) }); }); </script> <a href="#"><img class="rollover" src="../img/nav01.png" alt="" width="100" height="50"></a> <a href="#"><img class="rollover" src="../img/nav02.png" alt="" width="100" height="50"></a> ▼jquery.tgImageRollover.js ;(function($){ $.fn.tgImageRollover = function(options){ var opts = $.extend({}, $.fn.tgImageRollover.defaults, options); $(opts.selector).each( function(){ this.onImage = $(this).attr('src').replace(/^(.+)(\.[a-z]+)$/,"$1"+ opts.attach +"$2"); this.onHtml = $('<img src="'+this.onImage+'" alt="" style="position:absolute; opacity:0;">'); $(this).before(this.onHtml); $(this.onHtml).hover( function(){ $(this).stop().animate({'opacity': '1'}, opts.onFadeTime); }, function(){ $(this).stop().animate({'opacity': '0'}, opts.offFadeTime); } ) } ) } // default option $.fn.tgImageRollover.defaults = { selector : 'img.rollover', attach : '_on', onFadeTime : 600, offFadeTime : 400, }; })(jQuery);

  • jqueryについて

    jqueryについて こんな内容のjqueryをひとつにまとめて、なおかつ01~99(実績数)までのidを割り振る設定したいのですが可能でしょうか? 例えば $(function(){ $("#navi01-99 a").click(function(){ $("#main01-99 img").attr("src",$(this).attr("href")); return false; }); みたいな感じであとはidに番号を付ければいいみたいな・・・出来ませんでしょうか? 用途は仕事の制作実績で使用したいのですが、どなたか教えていただけますでしょうか? $(function(){ $("#navi01 a").click(function(){ $("#main01 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi02 a").click(function(){ $("#main02 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi03 a").click(function(){ $("#main03 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi04 a").click(function(){ $("#main04 img").attr("src",$(this).attr("href")); return false; }); }); $(function(){ $("#navi05 a").click(function(){ $("#main05 img").attr("src",$(this).attr("href")); return false; }); });

    • ベストアンサー
    • AJAX
  • ページによってロールオーバーが機能しない

    javascriptを使用して、カーソルがあたった時に色が変わる ロールオーバーを実現しているサイトを作りました。 ところが、ページによってロールオーバーが機能しません。 すべて同じソースをコピペしただけなのですがこれが原因ですか? サイトは複数ページあり、機能するものとそうでないもので 置かれている階層が異なるものもあります。 他のjavascriptも記述されているのですが、それらが影響しているのでしょうか? ちなみに下記のようなソースです。(一部抜粋) 【HTML】 <div id="a"> <a href=""> <img src="test.png" /> </a> <ul> <li> <a href="00.html"><img src="test2.png" class="rollover" /></a> </li> </ul> </div> 【javascript】 $.fn.rollover = function() { return this.each(function() { // 画像名を取得 var src = $(this).attr('src'); //すでに画像名に「_on.」が付いていた場合、ロールオーバー処理をしない if (src.match('_on.')) return; // ロールオーバー用の画像名を取得(_onを付加) var src_on = src.replace(/^(.+)(\.[a-z]+)$/, "$1_on$2"); // 画像のプリロード(先読み込み) $('').attr('src', src_on); // ロールオーバー処理 $(this).hover( function() { $(this).attr('src', src_on); }, function() { $(this).attr('src', src); } ); }); }; // 画像をロールオーバーする箇所を指定 $(function() { $('.rollover').rollover(); }); $(document).ready(function(){ $('.bxslider').bxSlider(); }); ご存知の方がいらっしゃいましたら対策を教えてください。 お願いいたします!

  • このjqueryが稀に動かない

    画像が無いときに表示されるscriptですが稀に動かない時があります10分の4位動かないです。どのようにすればよろしいでしょうか? <script type="text/javascript" src="/kadenkoujiya1242/js/jquery.js"></script> <script type="text/javascript" src="/kadenkoujiya1242/js/noimg.js"></script> $(function () { $('img').error(function(){ $(this).attr({src:'/kadenkoujiya1242/img/noimg.png',alt:'画像が見つかりません'}); }); });

  • jqueryが稀に動かない

    あるサイトからコピペしてきたソース $(function () { $('img').error(function () { $(this).attr({src: 'http://www.geocities.jp/kadenkoujiya1242/img/noimg.png'}); }); }); 画像がリンク切れしていた時などに代わりの画像を挿入するソースですが http://www.jslint.com/ で文法チェックしてみたら '$' was used before it was defined. $(function () { $('img').error(function () { $(this).attr({src: 'http://www.geocities.jp/kadenkoujiya1242/img/noimg.png'}); }); }); line 1 character 17 Missing 'use strict' statement. $(function () { $('img').error(function () { $(this).attr({src: 'http://www.geocities.jp/kadenkoujiya1242/img/noimg.png'}); }); }); と出ました。これはどのような意味があるのでしょうか?英語わかりません(泣) よかったらどのようにすれば治るかアドバイスお願いします!

  • jqueryについて

    サムネイルをマウスオーバーすると#targetに拡大画像を表示するものなのですがマウスオーバーで 切り替わりマウスアウトで元に戻るとこまではいいのですがフェードが全く効きません。 いろいろ試したところ$(".thumbnail a img")に変えるとフェードはするのですが今度は画像が 切り変わらなくなってしまいす。両者実装するにはどのように書き換えればいいのでしょうか? $(document).ready(function() { var originSrc = $("#target").attr("src"); $(".thumbnail a") .fadeTo(1,1) .hover( function() { var changeSrc = $(this).attr("href"); $("#target").attr("src", changeSrc); $(this).fadeTo(200, 0.5); }, function() { $("#target").attr("src", originSrc); $(this).fadeTo(500, 1); } ) });

  • jQueryのフェードイン・アウト効果について

    いつもお世話になります。 jQueryを使いタブメニューに画像ボタンを使って内容の切り替えをし、切り替え時にフェードイン・アウトの効果を出したいと思います。 以下がソースです。 <!-- html --> <div id="wrapper"> <ul id="tabMenu"> <li class="tab_a"><img src="tab1.png"/ ></li> <li class="tab_b"><img src="tab2_2.png" /></li> <li class="tab_c"><img src="tab3_2.png" /></li> </ul> <div id="tab_a"> tab_aの内容 </div> <div id="tab_b"> tab_bの内容 </div> <div id="tab_c"> tab_cの内容 </div> </div> <!-- jQuery --> var img_dir = "http://www.hogehoge.com/images/"; jQuery(function(){ // tab_aボタンをクリックした時の処理 jQuery(".tab_a").click(function(){ jQuery("#tab_a").css("display", "block"), jQuery("#tab_b").css("display", "none"), jQuery("#tab_c").css("display", "none"), jQuery(".tab_a img").attr("src", img_dir + "tab1.png"), jQuery(".tab_b img").attr("src", img_dir + "tab2_2.png"), jQuery(".tab_c img").attr("src", img_dir + "tab3_2.png"), }); // tab_bボタンをクリックした時の処理 jQuery(".tab_b").click(function(){ jQuery("#tab_a").css("display", "none"), jQuery("#tab_b").css("display", "block"), jQuery("#tab_c").css("display", "none"), jQuery(".tab_a img").attr("src", img_dir + "tab1_2.png"), jQuery(".tab_b img").attr("src", img_dir + "tab2.png"), jQuery(".tab_c img").attr("src", img_dir + "tab3_2.png"), }); // tab_cボタンをクリックした時の処理 jQuery(".tab_c").click(function(){ jQuery("#tab_a").css("display", "none"), jQuery("#tab_b").css("display", "none"), jQuery("#tab_c").css("display", "block"), jQuery(".tab_a img").attr("src", img_dir + "tab1_2.png"), jQuery(".tab_b img").attr("src", img_dir + "tab2_2.png"), jQuery(".tab_c img").attr("src", img_dir + "tab3.png"), }); }); 上記のコードでタブの切り替えは出来ましたが、ここからどう追記すれば切り替え時にフェード効果を付けれるのか分かりません。 やり方を検索し調べてはいるものの、解決に至らないので相談させていただきました。 よろしくお願いします。

  • ロールオーバーのJava Scriptの書き方

    ロールオーバーに関するJava Scriptの書き方教えてください。 $(".js_rollover_png").hover(function(){ $(this)[0].src=$(this)[0].src.replace("-off.png", "-on.png"); },function(){ $(this)[0].src=$(this)[0].src.replace("-on.png", "-off.png"); }); 上記でPC上では問題ないのですが、iphoneなどでロールオーバー画像をクリックしページ移動後、 元ページに戻るとロールオーバー画像が消えて見えなくなってしまいます。 初心者なので少しどうしたらいいか煮詰まってしまいましたので、お知恵をお貸し頂けませんでしょうか。 できましたら、どのように記述すればいいか記述例を教えていただければ幸いです。 ヨロシクお願い致します。 補足ちなみにiphoneなどスマホ、タブレットでロールオーバーは再現されなくてもいいです。 クリック後画像が消えなければそれで満足です。