JavaScript の replace 関数は、正規表現が使え、コールバック関数まで使えるという非常に便利なものです。でも、たまに使うときは使い方を忘れてしまうんです。
を見て動作を確認。
Android の UserAgent から Android のバージョンと端末名を取得するのは、以下のように書いてみました。
var ua = navigator.userAgent; // 例えば au の IS01 の場合 ua = 'Mozilla/5.0 (Linux; U; Android 1.6; ja-jp; IS01 Build/S6191) AppleWebKit..'; var android_ver, dev_name; ua.replace(/Android (.*);.*;\s*(.*)\sBuild/, function(ma, m1, m2) { android_ver = m1; dev_name = m2; }); alert(android_ver + "," + dev_name); // 1.6,IS01 が得られる
ちなみに、正攻法だと以下ですね。replace() 使うよりは、こっちのほうがシンプル。
var ua = navigator.userAgent; // 例えば ua = 'Mozilla/5.0 (Linux; U; Android 1.6; ja-jp; IS01 Build/S6191) AppleWebKit..'; var regex = /Android (.*);.*;\s*(.*)\sBuild/; var match = regex.exec(ua); var android_ver = match[1]; var dev_name = match[2]; alert(android_ver + "," + dev_name); // 1.6,IS01 が得られる
(補足で) replace()の第一引数に、RegExpオブジェクトを指定することで、特定キーワードをすべてコールバックで置換できます。
var keyword = "test"; var key_re = new RegExp(keyword,"g"); var str = "test test test"; str = str.replace(key_re, function(s) { return "<b>" + s + "</b>"; });