情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

ブログ内検索

スポンサーサイト このエントリーを含むはてなブックマーク

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

JavaScriptでmatch().replace()を失敗した理由 このエントリーを含むはてなブックマーク

ブックマークレットを編集したところ、動かなくなってしまいました。そして調べてみると、match()に続けてreplace()を実行している部分が原因でした。なぜmatch().replace()と書いてはいけなかったのかメモ。

失敗例

たとえばこんなコードを書いたときに失敗していました。

str = "abc".match(/abc/).replace("abc","ABC");

文字列abcからmatchでabcを取り出し、replaceでabcをABCに置換し、この文全体でABCを返すというなんの意味もないコードです。これに失敗します。どうも、matchとreplaceを繋げて書くと失敗しているようなのです。ただし、

alert("abc".match(/abc/));

と書くぶんにはちゃんと「abc」とアラートが表示されます。この時点でどうしてだか原因が分からなくなってしまいました。

原因:matchの返り値は配列

web上を探してみると、同じ例ではないものの、matchが実は配列を返していると言うことが分かりました。つまり、matchの返り値は配列の先頭であるmatch()[0]に入っていたのです

修正

つまり、さきほどの例では、次のようにすれば良かったのです。

str = "abc".match(/abc/)[0].replace("abc","ABC");

JavaScript | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。