43141


下記のコードは、javascriptで"和暦"と"西暦",及び"干支"を表示させるものですが、  
新元号に替わりましたら、元号は『〇〇1年』と表示されるはずです。  
これを『〇〇元年』と表示させるには、どのようにコードを書けばいいでしょうか。  
よろしくお願いします。

[code]

     <SCRIPT type="text/javascript">
     <!--
    var now=new Date();
    var Seireki=now.getFullYear();
    var Wareki=now.toLocaleDateString("ja-JP-u-ca-japanese", { year:"numeric" }).replace("年", "").replace(/\u200e/g, "").replace(" ", "");
    var Eto=new Array("申(猿)", "酉(鳥)", "戌〔犬〕", "亥(猪)", "子(鼠)", "丑(牛)", "寅(虎)", "卯(兎)", "辰(竜)", "巳(蛇)", "午(馬)", "未(羊)");
    var EtoNum=Seireki % 12;
    
      document.write("<p>");
      document.write("&nbsp;&nbsp;<span style='font-size : 25; color : red; font-weight:bold'>");
      document.write(Wareki);
      document.write(" (");
      document.write(Seireki);
      document.write(")");
      document.write("年  ");
      document.write(Eto[EtoNum]);
      document.write("</span>");
      document.write("</p>");
    //-->
    </script>
    
[/code]


CC BY-SA 3.0
2018-04-07T11:16:16.940
43036
2018-04-11T03:00:13.407
28063
question
javascript
javascriptで、元号の"１年"を"元年"と表示させるには


"var Wareki=～"の箇所の"replace(/\u200e/g, "")"の後に  
".replace("1", "元")"を追加すれば、希望通りになるようです。  
現在は、平成"30"年ですので、".replace("30", "元")"としましたら、  
『平成元年』と表示されました。


CC BY-SA 3.0
2018-04-07T16:06:21.620
43040
2018-04-07T16:06:21.620
28063
43036
answer


「前が数字でなく、次が末尾である `"1"` 一文字」を置換対象にしてみます。

[code]

    "平成1".replace(/(?<!\d)1(?=$)/, '元') //=> "平成元"
    "平成31".replace(/(?<!\d)1(?=$)/, '元') //=> "平成31"
    "平成10".replace(/(?<!\d)1(?=$)/, '元') /// => "平成10"
    
[/code]


CC BY-SA 3.0
2018-04-07T17:11:13.960
43043
2018-04-07T17:11:13.960
17037
43036
answer


もうすぐ元号が変わるので現実的なスクリプトを、（仕事では、元号は規則性はありませんので 固定値で条件を書いています。）

[code]

    //Date比較
    var now = new Date(1989, (1-1),7);//
    //var now = new Date(1989, (1-1),8);//
    
    var syou_e = new Date(1989, (1-1), 7);//昭和最後
    
    var hei_s = new Date(1989, (1-1), 8);//平成元年初め
    
    var hei_e = new Date(1989, (12-1), 31);//平成元年終わり
    
    if((syou_e < now) && (hei_e >= now)){
        console.log('平成元')
    }
    
[/code]

[code]

    //配列チェック（オブジェクトチェック）
         //   var now = new Date(1989, (1-1),7);//
            var now = new Date(1912, (7-1),30);//大正元年
        //    var now = new Date(1989, (1-1),8);//
            var gen_org = {平成1:"平成元",昭和1:"昭和元",大正1:"大正元"};//new Object("");
            var strings = now.toLocaleDateString("ja-JP-u-ca-japanese");
            //toLocaleDateStringは、デフォルトで"昭和64/1/7"or"平成1/1/8"　とstringsに入るので
            //’/’セパレータはmonthのパラメータの指定で変わるみたいです
            var gen_go = strings.split('/');
    
            if(gen_go[0] in gen_org) {
                console.log(gen_org[gen_go[0]]);
            }else{
                console.log(gen_go[0]);
            }
    
[/code]

[code]

    //split 正規表現版（数字抽出）
    //   var now = new Date(1989, (1-1),7);//
    var now = new Date(1912, (7-1),30);//大正元年
    //    var now = new Date(1989, (1-1),8);//
    var gen_org = {平成1:"平成元",昭和1:"昭和元",大正1:"大正元"};//new Object("");
    var strings = now.toLocaleDateString("ja-JP-u-ca-japanese");
    //toLocaleDateStringは、デフォルトで"昭和64/1/7"or"平成1/1/8"　とstringsに入るので
    //’/’セパレータはmonthのパラメータの指定で変わるみたいです
    var gen_go = strings.split('/');
    var str = gen_go[0].replace(/[^0-9]+/g,"");
    var gen_go_str = gen_go[0].replace(str,"");
    var no = parseInt(str,10);
    if(no == 1){
        console.log(gen_go_str+"元");
    }else{
        console.log(gen_go[0]);
    }
    
[/code]

前回から30年も経ったのか、次は、2019年5月1日ですが、まだ新元号は決まっていませんので考慮されていません。


CC BY-SA 3.0
2018-04-09T03:31:40.567
43082
2018-04-09T16:54:37.750
2018-04-09T16:54:37.750
22793
22793
43036
answer


1つの元号は最高101年ぐらいと仮定して、  
"var Wareki=now.toLocaleDateString("ja-JP-u-ca-japanese", { year:"numeric"
}).replace("年", "").replace(/\u200e/g, "").replace(" ", "");"  
の箇所に".replace("1", "元")"を追加します。  
そうすると、平成10年は『平成元0』と表示されますので、さらに".replace("元0",
"10")"と追加すると、正しく表示されるはずです。こういった追加を、10～19,21,31,41～101まで続けるといいと思いますが、これでいかがでしょうか。


CC BY-SA 3.0
2018-04-10T13:33:41.820
43139
2018-04-10T13:33:41.820
28063
43036
answer


アイデアはsakuroさんのものと同じことですが、(一部ブラウザで※)JavaScriptの正規表現では否定的後読み`?<!`が使えないせいでエラーになっているようなので修正したものです。

(※否定的後読みが動くブラウザもあるとのこと。)

[code]

    var now=new Date(1989,10,1);
    var Wareki=now.toLocaleDateString("ja-JP-u-ca-japanese", { era: "long", year:"numeric" })
        .replace("年", "").replace(/\u200e/g, "").replace(" ", "")
        .replace(/(^|[^\d])1(?=$|[^\d])/, '$1元');
    alert(Wareki); //-> 平成元
[/code]

また、SafariのJavaScriptでは、`era: "long"`を指定しないと、「平成」が出力されなかったので追加してあります。

ただ、新元号施行の時点では、多くのブラウザのJavaScriptはまだ新元号に対応していないでしょうから、yyzさんの書かれたような現実的な対応がどこかで必要になるかと思います。


CC BY-SA 3.0
2018-04-10T14:11:38.380
43141
2018-04-11T03:00:13.407
2018-04-11T03:00:13.407
13972
13972
43036
answer