- ベストアンサー
replaceで文字列を変換したいのですが…
replaceで、正規表現をどう使ったらよいのか中々わかりません。 医学関係の検査値に関する文字列を下のように変換したいのですが、良い方法があるでしょうか。 アルブミン 3.5 ↓ ALB 3.5g/dl 他にもたくさん検査項目が含まれる文字列を扱っていて、上のように項目名を半角英字に変換して、数値の後ろに単位を付けたいと思っています。 項目によって単位が異なるので、項目が「アルブミンならg/dl」「ビリルビンならmg/dl」がつくようにしたいのです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
じしんがない。;_; var str ='アルブミン 3.5'; str = str.replace(/アルブミン\s+(\d+\.*\d*)?/g,'ALB $1g/dl'); alert(str);
その他の回答 (3)
- steel_gray
- ベストアンサー率66% (1052/1578)
なんとなく出来てると思うけど、置換対象のバリエーションによってはうまくいかないかも。 // 置換のためのデータ 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
お礼
ご返答ありがとうございます。とてもスマートに変換できていますね。 このページの皆様のおかげで、10年前にjavascriptをかじった程度の私にもなんとかなりそうです。 もっと勉強してわかるようになると面白いんでしょうね。 皆様、どうもありがとうございました。
- think49
- ベストアンサー率59% (285/482)
> 項目が「アルブミンなら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/
お礼
ご返答ありがとうございます。 正規表現については素人なので、リンク先を参考にさせていただこうと思います。 色々なご回答をいただいたので、よりスマートな方法を考えてみようと思います。 ありがとうございました。
- dyna_1550
- ベストアンサー率34% (122/353)
正規表現はあまりお勧めではないのですが、以下のページのように正規表現 を利用して形態素解析をしている例があります。これを利用して、 文字列と数値を分けられるかもしれませんね。 http://ablog.seesaa.net/article/20969848.html 僕のお勧めは、検査項目クラスを作成して、各検査項目のインスタンスを 生成する方法。ベタベタな方法ですが、わかりやすいと思います。
お礼
早速のご回答、ありがとうございます。 リンク先を参照させて頂きました。なるほど、replaceの第2引数を関数にして、この方法で数値を取り出せば何とかなりそうな気がしますね。 もう少し色々試行錯誤してみようと思います。ありがとうございました。
お礼
ご回答ありがとうございます。 早速試してみたところ、うまくいったようです! これで項目の数だけreplaceを繰り返せば一番単純にできそうです。 他にも回答を下さった方がいるので、いろいろ検討してみます。 ありがとうございました。