• ベストアンサー

カンマのメソッドの意味

kurusの回答

  • ベストアンサー
  • kurus
  • ベストアンサー率52% (12/23)
回答No.1

正規表現を使用しています。 var re = /(-?\d+)(\d{3})/; で、合致する文字列のパターンを作成しています。 まず最初のカッコ内に関しては ・-? マイナスが着くかつかないか ・\d+ 数字が1つ以上連続する というパターンです。 そして次のカッコ内に関しては、 ・\d{3} 数字が3文字連続する ということ。 なので、この var reのパターンには、次のうちどれが当てはまるかわかりますか? (1)-1234 (2)-12 (3)124 (4)1234 (1)と(4)ですよね。 次にwhile(re.test(v)) では何をやっているかと言うと、 functionの引数のvに、reに設定したパターンが含まれているかチェックします。 含まれる場合はwhile文の中の、v.replace(re,"$1,$2")を行います。 replaceメソッドは、vの値をreの正規表現を使用し、 置換することをやっています。 replace内の$1とは、(-?\d+)のこと。$2は(\d{3})のこと。 なので、1234の場合は、1と234に分割され、それをカンマで連結するということをしているので、1,234となります。 -1234の場合は、-1と234に分割されるので-1,234となります。 ちなみに123456789の場合はループ処理内で、 1回目 123456,789 2回目 123,456,789 という形になります。 検索でJavascript 正規表現で色々出てきますので、 そちらも参考にして下さい。

takahiro_k
質問者

お礼

自分でも調べてみたのですが、 ここまで分かり易く説明してくれているサイトがなかったんです。 すごく分かり易く勉強になりました。 ありがとうございました。

関連するQ&A

  • カンマの付け方

    ファンクションの中で記述した数式の結果に 三桁区切りでカンマをつけたいのですが、 どうすればよろしいのでしょうか。 lstArariYosan.value = Math.floor(lstUriageYosan.value.replace(",","") * lstArariRitu.value); 今は、こんな感じでカンマを外して計算しています。 計算結果を出した後、逆にカンマをつけてから 表示するようにしたいのですが、 何かいい方法はありますか? また、下記がカンマ編集のメソッドの様ですが、 これを使って表示しようとするとエラーになります。 function addComma(su) {  var ret="";  var fugou="";  if(su.length>0 && su.substring(0, 1) == "-") {    ret = su.substring(1, su.length);    fugou = "-";  } else { ret = su; }  if(ret.length>3){    for(i=3;i<ret.length;i+=4){    var moji=ret.substring(0,ret.length-i)+','+ret.substring(ret.length-i,ret.length);    ret = moji;  } } return (fugou + ret); }

  • 戻り値必要なし

    JavaScript初心者です。 戻り値なしの関数について。return とreturn falseでは何か違うのでしょうか? function test(){ if(flag) return; var num=1+2; } function test2(){ if(flag) return false; var num=1+2; } よろしくお願いします。

  • 書き換えがうまくいかない

    次はスクリプトの一部です。 var index = 0; var name; function newName() { index++; name = "_" + index.toString(16); } var str = "10回"; str = str.replace(/^(.+?)回(以下を繰り返す)?$/, function(times) { newName(); return "for ("+name+"=0; "+name+"<"+times+"; "+name+"++) {" }); document.write(str); "for (_1=0; _1<10; _1++) {"と表示させたいのですが、 "for (_1=0; _1<10回; _1++) {"と表示されます。 *?を使っているのですが、replaceメソッドの 第2引数を文字列リテラルにするとうまくいくき、 上のように関数を使うとうまく書き換えられません。 よろしくお願いします。

  • javascriptでID指定場所に税込み合計を

    前回の質問が分かり難かったので、改めてご質問させていただきます。 外部javascriptでID指定場所に税抜き合計と税込み合計を表示したいです。 現在税抜き合計までは対応しています。(下記参照) お教えいただけましたら幸甚です。 商品1 <span id="suuji1">5,000</span> 商品2 <span id="suuji2">500</span> ・・・ 商品9 <span id="suuji9">2,000</span> 税抜き合計 <span id="total">ここに自動で表示</span> 税込み合計 <span id="zeikomi">ここに自動で表示</span> ※小数点以下切り捨て 商品の金額にはコンマが付いております。 合計金額にもコンマを付与したいです。9000→9,000 以上何卒宜しくお願い申し上げます。 <現在のソース> var preOnload = window.onload; window.onload = function() { if(preOnload){ preOnload() } var n=document.getElementsByTagName("span"); var v=0; for(var i=0;i<n.length;i++){ if(n[i].id.match(/^suuji[0-9]+$/)){ v +=parseInt(n[i].innerHTML.replace(/,/g,'')); } } var num=v.toString(); while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); document.getElementById("total").innerHTML=num; }

  • このコードは何をやっているのか

    data[i]には0~20位の数値が適当に入っている感じです function create(){ text += (data[i]+10).toString(31).toUpperCase(); while (text.match(/(\D)\1{8}/)) { text = text.replace(/(\D)\1{8}/,RegExp.$1+'9'); } while (text.match(/(\D)\1{7}/)) { text = text.replace(/(\D)\1{7}/,RegExp.$1+'8'); } while (text.match(/(\D)\1{6}/)) { text = text.replace(/(\D)\1{6}/,RegExp.$1+'7'); } while (text.match(/(\D)\1{5}/)) { text = text.replace(/(\D)\1{5}/,RegExp.$1+'6'); } while (text.match(/(\D)\1{4}/)) { text = text.replace(/(\D)\1{4}/,RegExp.$1+'5'); } while (text.match(/(\D)\1{3}/)) { text = text.replace(/(\D)\1{3}/,RegExp.$1+'4'); } while (text.match(/(\D)\1{2}/)) { text = text.replace(/(\D)\1{2}/,RegExp.$1+'3'); } while (text.match(/(\D)\1/)) { text = text.replace(/(\D)\1/,RegExp.$1+'2'); } } function load(text){ text = text.substring(text.indexOf("0")+1); while (text.match(/(\D)([2-9])/)) { text = text.replace(/(\D)([2-9])/,load2(RegExp.$1,RegExp.$2)) } j=1; for(i=0;i<text.length;i++) { cdata[j] = "ABCDEFGHIJKLMNOPQRSTU".indexOf(text.charAt(i)); j=j+1; } } function load2(arg1,arg2) { code = arg1; for (i=1;i<arg2;i++) { code += arg1; } return code; } 数値配列の圧縮とデコードをしているようですが 主に正規表現のあたりがどういう事をやっているのかが理解出来ません

  • 金額表示で3桁ごとにカンマを付ける方法

    こんにちは。 JavaScriptで金額を表示する際にカンマ(,)を付けたいのですがうまくできません。 「値段は10,800円(税込)です。」と表示させたいのです。 toLocaleString関数を使用すればいいらしいですが、どのように記述すればいいのかわかりませんでした。 ご教示頂けませんか。 宜しくお願い致します。 <section> <p id="output"></p> </section> <script> var total = function(price) { var tax = 0.08; return price + price * tax; } document.getElementById('output').textContent = '値段は' + total(10000) + '円(税込)です。'; </script>

  • javascritp「sort」メソッドについて

    WEB制作初心者、勉強中のものです。 javascritpのsortメソッドについて質問です。 無名関数を使って偶数と奇数を並び替えるコードについてですが、 下記の場合、function(a,b)の引数a,bには、一体どこの数値が入ってるのでしょうか。 var no=[1,2,3,・・・]の中だと思うのですが、、、、a,bが一体何を指すのが 教えていただけないでしょうか? // 『sort』の引数として、使い捨ての関数を作成して利用する var no = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 配列作成 no.sort(function (a, b) { // 偶数を前に、奇数を後ろにソートする if (a % 2 == 0 && b % 2 != 0) return -1; if (a % 2 != 0 && b % 2 == 0) return 1; return 0; }); alert(no); // 『2, 4, 6, 8, 10, 1, 3, 5, 7, 9』と表示 よろしくお願い致します。

  • (function(){})()の意味

    (function(){})() の意味がよくわからずに困っています。 下記の2タイプではどう意味が変わってくるのでしょうか? (1)var fuga = function(){}; (2)var fuga = (function(){})(); 下記のコードで実験してみたところ、 --------------------- var fuga = function(){ this.obj = 'value'; }; var fuga = (function(){ return { obj = 'value'; }; })(); --------------------- (1)の場合は、newしないとfugaオブジェクトのメンバを使用できない、 (2)の場合は、newしなくてもfugaオブジェクトのメンバを使用できるようなのですが、 (2)で(function(){})を取り除いて出てくる()はnewのエイリアスだったりするのでしょうか? 

  • n次式を手入力から自動変換にしたい

    n次式を手入力から自動変換にしたい。 たとえば、 var y = x³(x-5)² / 27; 現在は、式を手入力しています。 function test1(x){ var y = x * x * x * (x-5) * (x-5) / 27; return y; } これを自動変換して、次のようにしたい。 function test2(x){ var y = □□□□□□□□; return y; } for~ループ、または while文などを使ってできますか? わかる方、ご教示ください。

  • WSHについて教えてください

    他人の書いたプログラムを解析しているのですが、意味のわからない 行があって困っています。 下記はtest.txtをいうファイルを読み込み、その中に文字列"<checktest>"が 含まれていたら"-1"を返す関数です。 ■関数部分 function checktext(InFileN) var LineStr = new String(); while(!InFileN.AtEndOfStream) { LineStr = InFileN.ReadLine(); WScript.Echo(LineStr); WScript.Echo(">>" + LineStr.indexOf("<checktest>")) if(-1 < LineStr.indexOf("<checktest>")) { return(-1); } } return(1); ■関数呼び出し部分 var FileN,CheckFlg; FileN = FileSys.OpenTextFile(test.txt); CheckFlg = checktext(FileN); この関数の8行目の処理の意味がわかりません。 WScript.Echo(">>" + LineStr.indexOf("<checktest>")) <checktest>という文字は先頭にあるので、LineStr.indexOf("<checktest>") は0を返すと思います。 そうすると、この行は">>0を表示する"という意味でしょうか? なんのためにこの行があるのかわかりません。 どなたかわかる方がいらっしゃいましたら教えてください。 よろしくお願いします。