ラベル JavaScript の投稿を表示しています。 すべての投稿を表示
ラベル JavaScript の投稿を表示しています。 すべての投稿を表示

Link:ECMAScriptで学ぶ正規表現

(2024.04.09 05:12)

ECMAScriptで学ぶ正規表現


学習リンク

JavaScriptで正規表現 (1)


JavaScriptで正規表現

JavaScript(ECMAScript)で正規表現を使う方法のまとめ

・ECMAScriptで正規表現を使うには「RegExp」クラス、「String」クラスの一部のメソッドを使う

・RegExpクラスを使うには3つの方法がある

1. コンストラクタにマッチングパターン、フラグを指定
※作成されるたびにコンパイル (ループ中でパターンが変換する場合に使う)
const regex = new RegExp('パターン'); // RegExp('oo');
const regex = new RegExp('パターン', 'フラグ'); // RegExp('oo', 'g');

2. リテラル記法 (一般的な使い方)
※評価時にコンパイル (ループ中で毎回同じパターンを使う場合は効率が良い)
const regex = /パターン/; // regex = /oo/';
const regex = /パターン/フラグ; // regex = /oo/g;

3. コンストラクタを介したリテラル記法
const regex = new RegExp(/パターン/); // RegExp(/oo/);
const regex = new RegExp(/パターン/, 'フラグ'); // RegExp(/oo/, 'g');

・testメソッド (マッチングするか調べる)
const regex = /[\d]{4}/; // 4桁の数字
const str = '225-0002';
console.log(regex.test(str)); // true

・execメソッド (マッチングした文字列を取り出す)
const regex = /[\d]{4}/;
const str = '225-0002';
const array = regex.exec(str);
if (array !== null) {
 console.log('${array[0]}'); // 0002
}

・Stringクラス+matchメソッド (マッチングした文字列を配列で取得)
const regex = /[\d]{3,4}/g;
const str = '225-0002';
const array = str.match(regex);
if (array !== null) {
 console.log(array); // ['225', '0002']
}

・Stringクラス+matchAllメソッド (マッチングした文字列を反復子で取得)
※gフラグを指定すること
const regex = /[\d]{3,4}/g;
const str = '225-0002';
const array = str.matchAll(regex);
for (const match of array) {
console.log(match[0]); // 225 と 0002
}

・Stringクラス+searchメソッド (マッチングした文字列の位置)
※先頭は0、ヒットしなければ-1
const str = '225-0002';
const regex1 = /[\d]{4}/;
console.log(str.search(regex1)); // 4
const regex2 = /[\d]{5}/;
console.log(str.search(regex2)); // -1

・Stringクラス+replaceメソッド (マッチングした文字列を別の文字列に置き換え)
※gフラグを指定するとマッチングした全ての文字列を置換
const regex = /[\d]{4}/;
const str = '225-0002-0003';
console.log(str.replace(regex, '9999')); // 225-9999-0003
const regex2 = /[\d]{4}/g;
console.log(str.replace(regex2, '9999')); // 225-9999-9999

・Stringクラス+replaceAllメソッド (マッチングした文字列を全て置換)
※gフラグを指定すること
const regex = /o{2}/g;
const str = 'Boo Foo Woo';
console.log(str.replaceAll(regex, 'ee')); // Bee Fee Wee


JavaScript, 正規表現

JavaScript:ダブルバン?


!! (ダブル バン?)

JavaScriptで ! (exclamation 感嘆符 ビックリマーク エクスクラメーション マーク)を2つ繋げた記述を見かけた。

FirebaseWebコードラボ
return !!getAuth().currentUser;

何を意味しているのか良くわらかなったが、以下の説明によると
値があれば true、値が無ければ(nullなどであれば)falseを返すっぽい
Javascript「バン、バン。IShotYouDown」-Javascriptでのダブルバング(!!)の使用。| パトリック・ディバインより良い

上記サイトでは ! を2つ書くことを Double Bang と呼んでいた


JavaScript, Tips

書籍:JavaScriptプログラマのためのWebデザイン入門


JavaScriptプログラマのためのWebデザイン入門

タイトルJavaScriptプログラマのためのWebデザイン入門
Web design Primer for JavaScript Programmer
著者葛西秋雄/著
喜安亮介/著
出版者東京 秀和システム
出版年2010.9
形態事項14,225p 24cm
ISBN978-4-7980-2726-5
価格(本体価格 \2800)
NDC10(NDC9)007.645 (547.4833)
予約日2021.11.15(月)
取得日2021.11.19(金)


書籍

テンプレートリテラル

文字列野中に変数値を埋め込むには?

JavaScript

変数名または式をプレースホルダ ${ } 構造内に含める
${ 変数名 }
例) 参考 https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Strings
let score = 9;
let highestScore = 10;
let output = `I like the song "${ song }". I gave it a score of ${ score/highestScore * 100 }%.`;

JavaScript #1:scriptタグのdefer?



この論理属性は、スクリプトを文書の解析完了後かつ DOMContentLoaded が発生する前に実行することをブラウザーに示します。
defer 属性の付いたスクリプトは、スクリプトが読み込まれて評価が完了するまで、 DOMContentLoaded イベントの発生が抑制されます。
この属性は、 src 属性がない場合 (すなわちインラインスクリプト) に使用してはいけません。そのような場合は効果がありません。
defer 属性はモジュールスクリプトには効果がありません。 — 既定で延期が行われます。
defer 属性のあるスクリプトは、文書に現れた順に実行されます。
この属性により、ブラウザーが解析を一時停止してスクリプトを読み込んで評価しなければならないような、パーサーブロッキング JavaScript を排除することができるようになります。 async はこの場合と似た効果があります。

JavaScript #2:クラシックスクリプトとモジュールスクリプト?

クラシックスクリプトとモジュールスクリプト?


HTMLの仕様では、スクリプトには2種類存在する
・クラシックスクリプト (Classic script)
従来側のスクリプト

・モジュールスクリプト (Module Script)
MS Modulesのこと
scriptタグのtype属性に"module"を指定する

FullCalendar #5:イベントオブジェクト



イベントの表示

eventsオブジェクトにeventオブジェクトの配列を指定する。

プロパティ一覧
プロパティ 内容
id String イベントの一意の識別子。getEventByIdで使用
groupId String
allDay Boolean 終日セクションに表示するか?
start Date object イベント開始日時
end Date object イベント終了日時。終了がない場合はnull
startStr String (ISO8601) 開始日(start?)のISO8601文字列表現。イベントが終日である場合は時間の部分はなし。
endStr String (ISO8601) 終了日(end)のISO8601文字列表現。イベントが終日である場合は時間の部分はなし。
title String イベントに表示されるテキスト
url String ユーザーがこのイベントをクリックしたときにアクセスされるURL。参考) eventClickコールバック
classNames 文字列配列 ['myclass1'、myclass2 ']のような文字列の配列。 レンダリングされたイベントに添付されるHTMLクラス名を決定
editable Boolean / null この特定のイベントの編集可能な設定をオーバーライドする値
startEditable Boolean / null この特定のイベントのeventStartEditable設定をオーバーライドする値
durationEditable Boolean / null この特定のイベントのeventDurationEditable設定をオーバーライドする値
resourceEditable Boolean / null この特定のイベントのeventResourceEditable設定をオーバーライドする値
display String (Type) このイベントのレンダリングタイプ
指定可能な値:
"auto", "block", list-item", "background", inverse-background", "none"
参考) eventDisplay
overlap この特定のイベントのeventOverlap設定をオーバーライドする値
constraint この特定のイベントのeventConstraintオーバーライド
backgroundColor この特定のイベントのeventBackgroundColorオーバーライド
borderColor この特定のイベントのeventBorderColorオーバーライド
textColor この特定のイベントのeventTextColorオーバーライド
extendedProps 解析中に指定されたその他のその他のプロパティを保持するプレーンオブジェクト
明示的に指定されたextendedPropsハッシュのプロパティとその他の非標準プロパティを受け取る
source このイベントの発生元であるイベントソースへの参照
イベントがaddEventを介して動的に追加され、ソースパラメーターが指定されていない場合、この値はnullになる


FullCalendar, JavaScript, JS, ライブラリ

FullCalendar #4:イベントの表示



イベントの表示

eventsプロパティに、カレンダーに表示させるeventオブジェクトの配列を指定する。
最低限、イベント日付(start)とタイトル(title)を指定。
例えば以下の感じ
events: [{
  title: 'お休み',
  start: '2021-07-01',
},{
  title: 'お休み2',
  start: '2021-07-08',
}],


FullCalendar, JavaScript, JS, ライブラリ

FullCalendar:記事一覧

FullCalendar:記事一覧


No 日付 記事
3 2021.07.06 ツールバー
2 2021.07.04 日本語化
1 2021.07.04 とりあえず使ってみる


FullCalendar, JavaScript, JS, ライブラリ

FullCalendar #3:ツールバー



ツールバー

ヘッダとフッタの左側・中央・右側、それぞれに表示するオブジェクトを指定できる。
※ オブジェクトとは 前月・翌月ボタンやタイトルのこと

ヘッダは "headerToolbar"、フッタは "footerToolbar" の属性に指定

さらに それぞれに start(左側)、center(中央)、end(右側) の属性があり、
それらの値にオブジェクトの名前を","区切りの文字列として指定する。

指定可能なオブジェクトの名前
・title (現在の月/週/日を含むテキスト)
・prev (カレンダーを1か月/週/日に戻すためのボタン)
・next (カレンダーを1か月/週/日進めるためのボタン)
・prevYear (カレンダーを年に戻すためのボタン)
・nextYear (カレンダーを1年進めるためのボタン)
・today (カレンダーを現在の月/週/日に移動するためのボタン)
・dayGridDay (日ビュー)
・dayGridWeek (週ビュー)
・dayGridMonth (月ビュー)
・timeGridWeek (時刻ビュー)
・listDay (日予定リスト) ・listWeek (週予定リスト)
・listMonth (月予定リスト)
・listYear (年予定リスト)

ヘッダの左側、フッダの右側にすべて表示させてみる
<div id="calendar"></div>
    <script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.8.0/main.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.8.0/locales-all.min.js"></script>
    <script>
    document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        var calendar = new FullCalendar.Calendar(calendarEl, {
            initialView: 'dayGridMonth',
            locale: 'ja',
            headerToolbar: {
                start: 'title,prev,next,prevYear,nextYear,today,dayGridDay,dayGridWeek,dayGridMonth,timeGridWeek,listDay,listWeek,listMonth,listYear',
                center: '',
                end: '',
            },
            footerToolbar: {
                end: 'title,prev,next,prevYear,nextYear,today,dayGridDay,dayGridWeek,dayGridMonth,timeGridWeek,listDay,listWeek,listMonth,listYear',
            },
        });
        calendar.render();
    });
</script>


FullCalendar, JavaScript, JS, ライブラリ

FullCalendar #2:日本語化



日本語化

ググると色んなサイトに日本語化の説明が書かれているがどれもうまくいかなかった。
結局のところは locales-all.min.js の追加と、"locale: 'ja'" プロパティのだけで日本語化できそうである。

1) https://www.jsdelivr.com/package/npm/fullcalendar
locales-all.min.js を "Copy HTML" でコピーし、HTMLのmain.min.jsの下に貼り付け
※ main.min.jsの上だとエラーになる

2) FullCalendarコンストラクタのプロパティとして "locale: 'ja'" を追加

BODYタグ内は以下の感じ
<body>
    <div id="calendar"></div>
    <script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.8.0/main.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.8.0/locales-all.min.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            var calendarEl = document.getElementById('calendar');
            var calendar = new FullCalendar.Calendar(calendarEl, {
                initialView: 'dayGridMonth',
                locale: 'ja',
            });
            calendar.render();
        });
    </script>
</body>
</html>

これで日本語化される

※ 次回記事:#3:ツールバー

FullCalendar, JavaScript, JS, ライブラリ

FullCalendar #1:とりあえず使ってみる



とりあえず使ってみる

1) VSCodeを起動し "!" Enter でHTMLテンプレートを生成

2) https://www.jsdelivr.com/package/npm/fullcalendar
上記より main.min.css と main.min.js それぞで "COPY HTML" でコピー
・main.min.css → headタブの一番したに追加した
・main,in.js → bodyタブに追加

3) divタグを追加、id属性を "calendar" とする (名前は何でもよい)

4) DOMContentLoadedイベントで 3)で追加したID (今回は"calendar") にFullCalendarを描画する
<script>
    document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        var calendar = new FullCalendar.Calendar(calendarEl, {
            initialView: 'dayGridMonth',
        });
        calendar.render();
    });
</script>

これでカレンダーが表示される。

※ 次回記事:#2:日本語化

FullCalendar, JavaScript, JS, ライブラリ

その他の記事