和暦を西暦に変換して追加するブックマークレット

Pocket

ウェブページ上にある「平成23年」という文字列を西暦に換算し「平成23年(2011年)」に置換して表示するブックマークレットを作りました。
IE6の文字制限である508文字に合わせたので、寛保元年(西暦1741年)以降に対応します。

寛保(1741年)以降に対応するブックマークレット

javascript:(function(){o=document.getElementsByTagName('body')[0];s=o.innerHTML;s=s.replace(/元年/g,'1年');g='寛保,延享,寛延,宝暦,明和,安永,天明,寛政,享和,文化,文政,天保,弘化,嘉永,安政,万延,文久,元治,慶応,明治,大正,昭和,平成'.split(',');ys=[1740,1743,1747,1750,1763,1771,1780,1788,1800,1803,1817,1829,1843,1847,1853,1859,1860,1863,1864,1867,1911,1925,1988];r=new RegExp('('+g.join('|')+')([0-9]+)年','g');s=s.replace(r,function($0,$1,$2){for(i=0;i<g.length;i++){if($1==g[i]){yz=ys[i];}}return($1+$2+'年('+(parseInt($2)+parseInt(yz))+'年)')});o.innerHTML=s;})()

ジャスト508文字です。
適当に改行を入れると次のようになります。
まだ工夫の余地があるような気がしますが。

o=document.getElementsByTagName('body')[0];
s=o.innerHTML;s=s.replace(/元年/g,'1年');
g='寛保,延享,寛延,宝暦,明和,安永,天明,寛政,享和,文化,文政,天保,弘化,嘉永,安政,万延,文久,元治,慶応,明治,大正,昭和,平成'.split(',');
ys=[1740,1743,1747,1750,1763,1771,1780,1788,1800,1803,1817,1829,1843,1847,1853,1859,1860,1863,1864,1867,1911,1925,1988];
r=new RegExp('('+g.join('|')+')([0-9]+)年','g');
s=s.replace(r,function($0,$1,$2){
  for(i=0;i<g.length;i++){
    if($1==g[i]){
      yz=ys[i];
    }
  }
  return($1+$2+'年('+(parseInt($2)+parseInt(yz))+'年)')});
o.innerHTML=s;

最近のブラウザならばもっと多くの文字数でも大丈夫そうです。
すべての元号、つまり大化元年以降に対応してみました。
2178文字。
Firefoxで使えることを確認しました。

大化(645年)以降に対応するブックマークレット

javascript:(function(){o=document.getElementsByTagName('body')[0];s=o.innerHTML;s=s.replace(/元年/g,'1年');g='大化,白雉,朱鳥,大宝,慶雲,和銅,霊亀,養老,神亀,天平,天平勝宝,天平宝字,天平神護,神護景雲,宝亀,天応,延歴,大同,弘仁,天長,承和,嘉祥,仁寿,斉衡,天安,貞観,元慶,仁和,寛平,昌泰,延喜,延長,承平,天慶,天暦,天徳,応和,康保,安和,天禄,天延,貞元,天元,永観,寛和,永延,永祚,正暦,長徳,長保,寛弘,長和,寛仁,治安,万寿,長元,長暦,長久,寛徳,永承,天喜,康平,治暦,延久,承保,承暦,永保,応徳,寛治,嘉保,永長,承徳,康和,長治,嘉承,天仁,天永,永久,元永,保安,天治,大治,天承,長承,保延,永治,康治,天養,久安,仁平,久寿,保元,平治,永暦,応保,長寛,永万,仁安,嘉応,承安,安元,治承,養和,寿永,元暦,文治,建久,正治,建仁,元久,建永,承元,建暦,健保,承久,貞応,元仁,嘉禄,安貞,寛喜,貞永,天福,文暦,嘉禎,暦仁,延応,仁治,寛元,宝治,建長,康元,正嘉,正元,文応,弘長,文永,建治,弘安,正応,永仁,正安,乾元,嘉元,徳治,延慶,応長,正和,文保,元応,元亨,正中,嘉暦,元徳,正慶,建武,暦応,康永,貞和,観応,文和,延文,康安,貞治,応安,永和,康暦,永徳,至徳,嘉慶,康応,明徳,応永,正長,永享,嘉吉,文安,宝徳,享徳,康正,長禄,寛正,文正,応仁,文明,長享,延徳,明応,文亀,永正,大永,享禄,天文,弘治,永禄,元亀,天正,文禄,慶長,元和,寛永,正保,慶安,承応,明暦,万治,寛文,延宝,天和,貞享,元禄,宝永,正徳,享保,元文,寛保,延享,寛延,宝暦,明和,安永,天明,寛政,享和,文化,文政,天保,弘化,嘉永,安政,万延,文久,元治,慶応,明治,大正,昭和,平成'.split(',');ys=[644,649,685,700,703,707,714,716,723,728,748,756,764,766,769,780,781,805,809,823,833,847,850,853,856,858,876,884,888,897,900,922,930,937,946,956,960,963,967,969,972,975,977,982,984,986,988,989,994,998,1003,1011,1016,1020,1023,1027,1036,1039,1043,1045,1052,1057,1064,1068,1073,1076,1080,1083,1086,1093,1095,1096,1098,1103,1105,1107,1109,1112,1117,1119,1123,1125,1130,1131,1134,1140,1141,1143,1144,1150,1153,1155,1158,1159,1160,1162,1164,1165,1168,1170,1174,1176,1180,1181,1183,1184,1189,1198,1200,1203,1205,1206,1210,1212,1218,1221,1223,1224,1226,1228,1231,1232,1233,1234,1237,1238,1239,1242,1246,1248,1255,1256,1258,1259,1260,1263,1274,1277,1287,1292,1298,1301,1302,1305,1307,1310,1311,1316,1318,1320,1323,1325,1328,1331,1333,1337,1341,1344,1349,1351,1355,1360,1361,1367,1374,1378,1380,1383,1386,1388,1389,1393,1427,1428,1440,1443,1448,1451,1454,1456,1459,1465,1466,1468,1486,1488,1491,1500,1503,1520,1527,1531,1554,1557,1569,1572,1591,1595,1614,1623,1643,1647,1651,1654,1657,1660,1672,1680,1683,1687,1703,1710,1715,1735,1740,1743,1747,1750,1763,1771,1780,1788,1800,1803,1817,1829,1843,1847,1853,1859,1860,1863,1864,1867,1911,1925,1988];r=new RegExp('('+g.join('|')+')([0-9]+)年','g');s=s.replace(r,function($0,$1,$2){for(i=0;i<g.length;i++){if($1==g[i]){yz=ys[i];}}return($1+$2+'年('+(parseInt($2)+parseInt(yz))+'年)')});o.innerHTML=s;})()

全角に対応(2018年1月27日追記)

Twitterで
・全角数字に対応。
・省略表記に対応(「昭12年」や「S12年」など。「明大昭平MTSH」に対応)。
というリクエストをいただいたので書き換えてみました。
Chrome(バージョン63)で動作することを確認しました。IE(バージョン11)でも動作しました。一方、Firefox(57)では動作を確認できませんでした。

大化(645年)以降、全角数字、省略表記に対応するブックマークレット

javascript:(function(){o=document.getElementsByTagName('body')[0];s=o.innerHTML;s=s.replace(/元年/g,'1年');g='大化,白雉,朱鳥,大宝,慶雲,和銅,霊亀,養老,神亀,天平,天平勝宝,天平宝字,天平神護,神護景雲,宝亀,天応,延歴,大同,弘仁,天長,承和,嘉祥,仁寿,斉衡,天安,貞観,元慶,仁和,寛平,昌泰,延喜,延長,承平,天慶,天暦,天徳,応和,康保,安和,天禄,天延,貞元,天元,永観,寛和,永延,永祚,正暦,長徳,長保,寛弘,長和,寛仁,治安,万寿,長元,長暦,長久,寛徳,永承,天喜,康平,治暦,延久,承保,承暦,永保,応徳,寛治,嘉保,永長,承徳,康和,長治,嘉承,天仁,天永,永久,元永,保安,天治,大治,天承,長承,保延,永治,康治,天養,久安,仁平,久寿,保元,平治,永暦,応保,長寛,永万,仁安,嘉応,承安,安元,治承,養和,寿永,元暦,文治,建久,正治,建仁,元久,建永,承元,建暦,健保,承久,貞応,元仁,嘉禄,安貞,寛喜,貞永,天福,文暦,嘉禎,暦仁,延応,仁治,寛元,宝治,建長,康元,正嘉,正元,文応,弘長,文永,建治,弘安,正応,永仁,正安,乾元,嘉元,徳治,延慶,応長,正和,文保,元応,元亨,正中,嘉暦,元徳,正慶,建武,暦応,康永,貞和,観応,文和,延文,康安,貞治,応安,永和,康暦,永徳,至徳,嘉慶,康応,明徳,応永,正長,永享,嘉吉,文安,宝徳,享徳,康正,長禄,寛正,文正,応仁,文明,長享,延徳,明応,文亀,永正,大永,享禄,天文,弘治,永禄,元亀,天正,文禄,慶長,元和,寛永,正保,慶安,承応,明暦,万治,寛文,延宝,天和,貞享,元禄,宝永,正徳,享保,元文,寛保,延享,寛延,宝暦,明和,安永,天明,寛政,享和,文化,文政,天保,弘化,嘉永,安政,万延,文久,元治,慶応,明治,大正,昭和,平成,m,t,s,h,明,大,昭,平'.split(',');ys=[644,649,685,700,703,707,714,716,723,728,748,756,764,766,769,780,781,805,809,823,833,847,850,853,856,858,876,884,888,897,900,922,930,937,946,956,960,963,967,969,972,975,977,982,984,986,988,989,994,998,1003,1011,1016,1020,1023,1027,1036,1039,1043,1045,1052,1057,1064,1068,1073,1076,1080,1083,1086,1093,1095,1096,1098,1103,1105,1107,1109,1112,1117,1119,1123,1125,1130,1131,1134,1140,1141,1143,1144,1150,1153,1155,1158,1159,1160,1162,1164,1165,1168,1170,1174,1176,1180,1181,1183,1184,1189,1198,1200,1203,1205,1206,1210,1212,1218,1221,1223,1224,1226,1228,1231,1232,1233,1234,1237,1238,1239,1242,1246,1248,1255,1256,1258,1259,1260,1263,1274,1277,1287,1292,1298,1301,1302,1305,1307,1310,1311,1316,1318,1320,1323,1325,1328,1331,1333,1337,1341,1344,1349,1351,1355,1360,1361,1367,1374,1378,1380,1383,1386,1388,1389,1393,1427,1428,1440,1443,1448,1451,1454,1456,1459,1465,1466,1468,1486,1488,1491,1500,1503,1520,1527,1531,1554,1557,1569,1572,1591,1595,1614,1623,1643,1647,1651,1654,1657,1660,1672,1680,1683,1687,1703,1710,1715,1735,1740,1743,1747,1750,1763,1771,1780,1788,1800,1803,1817,1829,1843,1847,1853,1859,1860,1863,1864,1867,1911,1925,1988,1867,1911,1925,1988,1867,1911,1925,1988];r=new RegExp('('+g.join('|')+')([0-90-9]+)年','gi');s=s.replace(r,function($0,$1,$2){for(i=0;i<g.length;i++){if($1==g[i]){yz=ys[i];}}return($1+$2+'年('+(parseInt($2.replace(/[0-9]/g,function($0){return(String.fromCharCode(parseInt($0.charCodeAt(0))-65248))}))+parseInt(yz))+'年)')});o.innerHTML=s;})()

令和に対応(2019年4月7日)

新元号「令和」に対応しました。「R」「令」にも対応します。
例によってデバッグを充分行っていないので使用に際しては充分にチェックしてください。

大化から令和まで、全角数字、省略表記に対応するブックマークレット

javascript:(function(){o=document.getElementsByTagName('body')[0];s=o.innerHTML;s=s.replace(/元年/g,'1年');g='大化,白雉,朱鳥,大宝,慶雲,和銅,霊亀,養老,神亀,天平,天平勝宝,天平宝字,天平神護,神護景雲,宝亀,天応,延歴,大同,弘仁,天長,承和,嘉祥,仁寿,斉衡,天安,貞観,元慶,仁和,寛平,昌泰,延喜,延長,承平,天慶,天暦,天徳,応和,康保,安和,天禄,天延,貞元,天元,永観,寛和,永延,永祚,正暦,長徳,長保,寛弘,長和,寛仁,治安,万寿,長元,長暦,長久,寛徳,永承,天喜,康平,治暦,延久,承保,承暦,永保,応徳,寛治,嘉保,永長,承徳,康和,長治,嘉承,天仁,天永,永久,元永,保安,天治,大治,天承,長承,保延,永治,康治,天養,久安,仁平,久寿,保元,平治,永暦,応保,長寛,永万,仁安,嘉応,承安,安元,治承,養和,寿永,元暦,文治,建久,正治,建仁,元久,建永,承元,建暦,健保,承久,貞応,元仁,嘉禄,安貞,寛喜,貞永,天福,文暦,嘉禎,暦仁,延応,仁治,寛元,宝治,建長,康元,正嘉,正元,文応,弘長,文永,建治,弘安,正応,永仁,正安,乾元,嘉元,徳治,延慶,応長,正和,文保,元応,元亨,正中,嘉暦,元徳,正慶,建武,暦応,康永,貞和,観応,文和,延文,康安,貞治,応安,永和,康暦,永徳,至徳,嘉慶,康応,明徳,応永,正長,永享,嘉吉,文安,宝徳,享徳,康正,長禄,寛正,文正,応仁,文明,長享,延徳,明応,文亀,永正,大永,享禄,天文,弘治,永禄,元亀,天正,文禄,慶長,元和,寛永,正保,慶安,承応,明暦,万治,寛文,延宝,天和,貞享,元禄,宝永,正徳,享保,元文,寛保,延享,寛延,宝暦,明和,安永,天明,寛政,享和,文化,文政,天保,弘化,嘉永,安政,万延,文久,元治,慶応,明治,大正,昭和,平成,令和,m,t,s,h,r,明,大,昭,平,令'.split(',');ys=[644,649,685,700,703,707,714,716,723,728,748,756,764,766,769,780,781,805,809,823,833,847,850,853,856,858,876,884,888,897,900,922,930,937,946,956,960,963,967,969,972,975,977,982,984,986,988,989,994,998,1003,1011,1016,1020,1023,1027,1036,1039,1043,1045,1052,1057,1064,1068,1073,1076,1080,1083,1086,1093,1095,1096,1098,1103,1105,1107,1109,1112,1117,1119,1123,1125,1130,1131,1134,1140,1141,1143,1144,1150,1153,1155,1158,1159,1160,1162,1164,1165,1168,1170,1174,1176,1180,1181,1183,1184,1189,1198,1200,1203,1205,1206,1210,1212,1218,1221,1223,1224,1226,1228,1231,1232,1233,1234,1237,1238,1239,1242,1246,1248,1255,1256,1258,1259,1260,1263,1274,1277,1287,1292,1298,1301,1302,1305,1307,1310,1311,1316,1318,1320,1323,1325,1328,1331,1333,1337,1341,1344,1349,1351,1355,1360,1361,1367,1374,1378,1380,1383,1386,1388,1389,1393,1427,1428,1440,1443,1448,1451,1454,1456,1459,1465,1466,1468,1486,1488,1491,1500,1503,1520,1527,1531,1554,1557,1569,1572,1591,1595,1614,1623,1643,1647,1651,1654,1657,1660,1672,1680,1683,1687,1703,1710,1715,1735,1740,1743,1747,1750,1763,1771,1780,1788,1800,1803,1817,1829,1843,1847,1853,1859,1860,1863,1864,1867,1911,1925,1988,2018,1867,1911,1925,1988,2018,1867,1911,1925,1988,2018];r=new RegExp('('+g.join('|')+')([0-90-9]+)年','gi');s=s.replace(r,function($0,$1,$2){for(i=0;i<g.length;i++){if($1==g[i]){yz=ys[i];}}return($1+$2+'年('+(parseInt($2.replace(/[0-9]/g,function($0){return(String.fromCharCode(parseInt($0.charCodeAt(0))-65248))}))+parseInt(yz))+'年)')});o.innerHTML=s;})()

関連記事

[ 2011年6月30日 | カテゴリー: JavaScript | タグ: , , , , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報