• ベストアンサー

replaceで文字列を変換したいのですが…

replaceで、正規表現をどう使ったらよいのか中々わかりません。 医学関係の検査値に関する文字列を下のように変換したいのですが、良い方法があるでしょうか。 アルブミン 3.5    ↓ ALB 3.5g/dl 他にもたくさん検査項目が含まれる文字列を扱っていて、上のように項目名を半角英字に変換して、数値の後ろに単位を付けたいと思っています。 項目によって単位が異なるので、項目が「アルブミンならg/dl」「ビリルビンならmg/dl」がつくようにしたいのです。 よろしくお願いします。

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

  • ベストアンサー
回答No.2

じしんがない。;_; var str ='アルブミン 3.5'; str = str.replace(/アルブミン\s+(\d+\.*\d*)?/g,'ALB $1g/dl'); alert(str);

HotakaMt
質問者

お礼

ご回答ありがとうございます。 早速試してみたところ、うまくいったようです! これで項目の数だけreplaceを繰り返せば一番単純にできそうです。 他にも回答を下さった方がいるので、いろいろ検討してみます。 ありがとうございました。

その他の回答 (3)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.4

なんとなく出来てると思うけど、置換対象のバリエーションによってはうまくいかないかも。 // 置換のためのデータ var cvT = { 'アルブミン':['ALB','g/dl'], 'ビリルビン':['BLB','mg/dl'] }; var sample_text = 'アルブミン 3.5 ビリルビン 2.9 アルブミン 7 ビリルビン 1.5'; document.write(sample_text,'<br>');//置換前 for(var key in cvT) { var ptn = new RegExp('('+key+')(\\s*\\d+(\\.\\d+)?)','g'); sample_text = sample_text.replace(ptn,cvT[key][0]+'$2'+cvT[key][1]); } document.write(sample_text);//置換後 // 結果 → ALB 3.5g/dl BLB 2.9mg/dl ALB 7g/dl BLB 1.5mg/dl

HotakaMt
質問者

お礼

ご返答ありがとうございます。とてもスマートに変換できていますね。 このページの皆様のおかげで、10年前にjavascriptをかじった程度の私にもなんとかなりそうです。 もっと勉強してわかるようになると面白いんでしょうね。 皆様、どうもありがとうございました。

  • think49
  • ベストアンサー率59% (285/482)
回答No.3

> 項目が「アルブミンならg/dl」「ビリルビンならmg/dl」がつくようにしたいのです。 複数置換するなら配列でまとめるかなあ…。(数値は小数点無しも許容するとして) ---- function replaceAll(str, a){ for(var i=0,l=a.length; i<l; i++){ str = str.replace(new RegExp(a[i][0]),[a[i][1]]); } return str; } var reg = [ ['アルブミン\\s*(\\d+(?:\\.\\d+)?)(?!g\\/dl)','ALB $1g/dl'], ['ビリルビン\\s*(\\d+(?:\\.\\d+)?)(?!mg\\/dl)','bilirubin $1mg/dl'] ]; var str = "アルブミン 1.0\nビリルビン 2.0"; str = replaceAll(str, reg); alert(str); ---- > replaceで、正規表現をどう使ったらよいのか中々わかりません。 正規表現に初めて触れるなら、下記サイトがわかりやすいと思います。 サルにもわかる正規表現入門 http://www.mnet.ne.jp/~nakama/

HotakaMt
質問者

お礼

ご返答ありがとうございます。 正規表現については素人なので、リンク先を参考にさせていただこうと思います。 色々なご回答をいただいたので、よりスマートな方法を考えてみようと思います。 ありがとうございました。

  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.1

正規表現はあまりお勧めではないのですが、以下のページのように正規表現 を利用して形態素解析をしている例があります。これを利用して、 文字列と数値を分けられるかもしれませんね。 http://ablog.seesaa.net/article/20969848.html 僕のお勧めは、検査項目クラスを作成して、各検査項目のインスタンスを 生成する方法。ベタベタな方法ですが、わかりやすいと思います。

HotakaMt
質問者

お礼

早速のご回答、ありがとうございます。 リンク先を参照させて頂きました。なるほど、replaceの第2引数を関数にして、この方法で数値を取り出せば何とかなりそうな気がしますね。 もう少し色々試行錯誤してみようと思います。ありがとうございました。

関連するQ&A