• ベストアンサー

Javascript searchで?があるとなぜ

JavaScriptのsearch関数についてですが、文字列に?があると期待したとおりの結果が得られないのですがなぜでしょうか。 Google Chrome の JavaScriptコンソールでの結果 'abcd?efg'.search('abcd?') 0 'abcd?efg'.search('abcd?e') -1 どちらも0が返ってこないのはどうしてでしょうか。

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

  • ベストアンサー
  • byDesign
  • ベストアンサー率75% (45/60)
回答No.1

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/search searchは正規表現でマッチを行うので?はエスケープする必要があります。 'abcd?efg'.search('abcd\\?e') https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf indexOfというのもあります。 こちらは、文字列マッチなのでエスケープする必要ありません。

meteoyameteo
質問者

お礼

ありがとうございます。文字列が内部的に正規表現になるんですね。エラーにならないので気付きませんでした。まさかそんな柔軟性があるわけがないとどこかで思い込んでいました。

関連するQ&A

  • 文字列の置換の仕方について

    下記のような文字列の置換は、どのようにすればいいでしょうか? <?php $strString="abcd<!--s_1-->うほほ<!--e_1-->efg";//本当は、もっと長い文字列が入っています $strReplace="/<!--s_1-->.*<!--e_1-->/"; $word="あいう"; //関数へ飛ばします $result=fun_replace($strReplace,$strString,$word); function fun_replace($strReplace,$strString,$word){ //さて、どう組むか? } ?> 結果として、"abcd<!--s_1-->うほほ<!--e_1-->efg" → "abcd<!--s_1-->あいう<!--e_1-->efg" になればいいわけです。 ただし、常に、<!--s_1-->が来るとは限らないので、 (<!--s_2-->などが来ることもあります) "<!--s_1-->"."あいう"."<!--e_1-->" というような、<!--s_1-->などを明示的に指定して、文字列を 連結することはできません。 つまり、 preg_replace($strReplace,"<!--s_1-->なんと<!--e_1-->",$strString) という書き方は、できないという条件があります。

    • ベストアンサー
    • PHP
  • javascriptで質問があります!

    こんにちは。 javascriptで、入力された文字列から指定された文字を含む行を抜き出すプログラムを作りたいです。 例: 入力された文字列 : abcd             efghi  指定した文字    :b 出力         :abcd こんな感じのプログラムを作りたいです。正規表現を使えばいけるのかなと思うのですがどなたか知恵をお貸しいただけないでしょうか? よろしくお願いいたします。

  • grepの正規表現での最短マッチが効かない

    echo 'abcd_efg_hijk_l_m_n_opqr' | grep -o -E "^[a-z].+?_" 上記の結果が、期待する abcd_ になりません。 なぜか、 abcd_efg_hijk_l_m_n_ になります。 egrepでも同じでした。 phpでのpreg系ではabcd_をマッチ結果として返してきます。 linuxのgrepでこのような結果になるのはなぜですか? よろしくお願いします。

  • エクセルの文字列・数値【長文です】

    昨日、LEFT関数の使い方を教えていただきましたが、これですとLEFT関数を用いたところが【文字列】として認識されました。【数値】として認識させる方法を教えてください。 初心者で申し訳ございません。 昨日の質問・いただいた回答は以下の通りでした。 ≪質問≫ [123456/あいうえお/abc][234567/かきくけこ/efg]のようなデータがいくつかあって(例えばA列に)、B列に[123456][234567]、C列に[あいうえお][かきくけこ]、D列に[abc][efg]と表記できるような【関数】を教えてください。 ≪いただいた回答≫ A1にデータがあったとして。 B列 =LEFT(A1,SEARCH("/",A1,1)-1) C列 =LEFT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),1)-1) D列 =RIGHT(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)),LEN(RIGHT(A1,LEN(A1)-SEARCH("/",A1,1)))-SEARCH("/",RIGHT(A1,LEN(A1)-SEARCH("/",A1,1))))

  • JavaScript付きのリンクを送りたい

    初心者的な質問ですが、よろしくお願いします。 他人に検索結果のURLを送る場合、そのまま結果ページのURLをメール等に貼り付ければ、相手はクリックするだけで検索結果のページが見れます。 たとえばGoogleで「あいうえお」を検索した結果を送りたい場合、 http://www.google.co.jp/search?hl=ja&source=hp&q=%E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A&lr=&aq=f&oq= というクエリ付きのリンクを送ればいいので簡単です。 しかし、サイトによってはJavaScriptでキーワードをサーバーに送信し、同じページに検索結果を表示しているので、URLは変化しません。 formタグ内のaction関数名や、inputタグのname属性はソースを見ればわかるのですが、どうやってURLに組み込むかがわかりません。 相手にはクリックするかブラウザのアドレスバーに貼り付ければ直接検索結果が見れるようにし、お気に入りに入れればブックマークレット的に使えるかと思うのですが、方法はありますか。

  • javascriptでEUCのエンコード

    検索エンジン用のエンコードした文字列をjavascriptで処理しようとしています。 encodeURIComponent で処理するとUTF-8でエンコードされてしまい、思うような結果が得られません。 EUCでエンコードされた結果を得る方法は無いでしょうか? ネットで探してみたのですがjavascriptだけで解決する方法を見つけられずに困っています。 javascript内で自作の関数を作ってもいいのですが、何かヒントがあればと思います。 よろしくお願いします。

  • Javascriptのエレガントな書き方。

    javascriptで 次のような関数を作りたいのですが、エレガントに行う方法が知りたいです。 引数で数値0ならば、 0001という文字列 250なら 0250 12345なら 12345と文字列を返すものです。 また、皆さんのJavascript攻略方法も知りたいです。 最近プロトタイプとかいう言葉が出てきて、正直?状態です。

  • VB.net・JavaScriptエンコードについて

    VB.net・JavaScriptエンコードについて JavaScriptでのエンコード、ではなく、 下記のページに表示されている「JavaScript」の書式が何なのかがわかりません。 http://encodemaniax.com/index/encode/utf8/44Oi44Oz44K544K%2C44O8 「モンスター」という文字列を訳があって 「"\u30e2\u30f3\u30b9\u30bf\u30fc"」という文字列に変換したいのです。 utf-8やShift-jisの変換はできるのですが、 上記ページの「JavaScript」が何を示しているのかわかりません。 自分でGoogleなどで調べても、検索用語が「JavaScriptエンコード」などとしか検索できないので 「JavaScriptでのエンコード」の結果が出てきてしまいます(汗 初歩的なことかもしれませんが、ご回答いただければ幸いです。 宜しくお願いいたします。

  • google サーチウィキが表示されません

    OSはXpでFirefoxを使っています。 いつからかgoogleの検索結果のサーチウィキが表示されなくなりました。 Firefoxのアドオンの影響かと思い、google chrome、IE8で同じアカウントで 検索してもやはり表示されません。 違うアカウントで検索すると表示されます。 どうやら自分のメインのアカウントがサーチウィキが表示されない様になってしまっているようです。 どうすれば解決できるでしょうか。 アドバイスお願いいたします。

  • javascriptでヒアドキュメント書きました

    javascript で ヒアドキュメント的なコードを書いてみました。 私が現在使用している IE8 及び Chrome では正常に動作しているようですが、 他のブラウザでも正常に動作するか、時間のある方お知らせください。 コードサンプルは以下のとおり。subHereDoc()関数コメント内の文字列が抜き出されて ダイアログ表示されればOKと判断してよいと思っています。 #### コードここから #### /* javascript free code from iph4.net by tasa */ // HereDoc 文字列設定関数 function subHereDoc() { /* <pre> あいうえお かきくけこ さしすせそ </pre> */ } // HereDoc 文字列取得関数 function subGetHereDoc( xFuncNameOfHereDoc ) { if( ! window[xFuncNameOfHereDoc] )return ""; var zStr = ""+window[xFuncNameOfHereDoc]; return zStr.substr(0,zStr.indexOf("*/")).substr(zStr.IndexOf("/*")+2); } alert(subGetHereDoc("subHereDoc")); #### コードここまで #### ここのところ GoogleMapApi連携のJavascriptプログラムを作成していますが、 コードがごちゃごちゃしてきたためにヒアドキュメントを使おうと思い立ちました。 ""+window["関数名"]で関数定義自体の文字列が取得できるというのがミソですが、 上記のコードが使えないブラウザがあれば今後の課題としたいと思います。 特に問題が無いと判ればがんがん使いたいと思います。 スクリプトタグ及び /*~*/ コメントタグ以外はそのまま使えると思います。 あと、よろしければ以下のページのアクセスアップにご協力を。 近日中にGoogleMapのルート検索を利用したお絵かきソフト(?)をアップしてみたいと思っています。 J-GoogleMap Top ページ http://iph4.net/gmap J-GoogleMap フリーマーカー設定の説明 ページ http://iph4.net/gmap/iph_help.htm よろしくお願いします。

専門家に質問してみよう