Paepoi » JavaScript Tips » JavaScript String
JavaScript String
# 最終更新日 2020.07.19
Gjs での覚書です、環境によっては print を console.log で全置換してください
文字列操作
切り出し方法が三つもあるけど気にしないことにしよう
/* * 切り出し */ const STR = '漢字も一文字だもん!'; let a = STR.slice(3, 6); // (開始位置 ,終了位置) let c = STR.substring(3, 6); // (開始位置 ,終了位置) let b = STR.substr(3, 3); // (開始位置 ,切り出す長さ) print(`${a}, ${b}, ${c}`); //=> 一文字, 一文字, 一文字 print(STR.slice(3)); // (開始位置のみ指定) //=> 一文字だもん! print(STR.slice(-4)); // (後方からマイナス指定) //=> だもん! /* * 検索 */ STR.startsWith('漢字'); // 最初はコレで始まっているか //=>true STR.endsWith('もん!'); // 最後はコレで終わっているか //=>true STR.indexOf('も'); // 最初の出現位置、存在しなければ -1 が戻る //=>2 STR.lastIndexOf('も'); // 最後の出現位置、存在しなければ -1 が戻る //=>7 STR.includes('もん'); // 含まれている? //=>true /* * 大文字化、小文字化 */ print('ABCdef'.toLowerCase()); //=>abcdef print('ABCdef'.toUpperCase()); //=>ABCDEF /* * 前後の空白や最後の改行を取り除く * 前方のみなら trimStart、後方のみなら trimEnd を使う */ let f = ' aa bb cc \n'; print(f.trim()); //=> 'aa bb cc' // ゼロ詰め '7'.padStart(4, '0'); //=> '0007'
文字列変換
第一引数で挙動が変わるのを知らない人多いと思う
let strs = `スズキのバイクは美しい スズキのバイクはカワイイ スズキのバイクをペロペロしたい`; // 第一引数が文字列なら最初に一致した語句のみ変換 print(strs.replace('スズキのバイク', 'うんち')); //第一引数が正規表現ならマッチしたすべての語句を変換、g は繰り返しの意味 print(strs.replace(/スズキのバイク/g, '僕の妹'));
UTF-8 との相互変換
Gjs や JXA では不要な場合があります
let str = '文字列をUTF-8に'; let utf8str = unescape(encodeURIComponent(str)); let utf16str = decodeURIComponent(escape(utf8str)); print(utf16str); // JavaScript 内部文字列は UTF-16LE
コードポイント
Python の chr ord 相当、ちなみに Python はサロゲートペア問題は無い
// コードポイントを UNICODE 文字に変換、Python では chr(97) String.fromCharCode(97); //=> 'a' // UNICODE 文字をコードポイントに変換、Python では ord('a') // 引数の数値は先頭から何番目か、一文字ならゼロでいい 'a'.charCodeAt(0); //=> 97 // サロゲートペアにも対応関数、UTF-16 範囲は上記と同じ結果になる String.fromCodePoint(9940); //=> '⛔' '⛔'.codePointAt(0); //=> 9940
ループと配列
for of ループはサロゲートペア、emoji に対応
// 一文字ずつ取り出す for (let s of '🎴あ⛔') print(s); // bash のように空白区切りにしたい場合は配列化 let suzuki = 'スズキの バイクは カッコイイ'; let suteki = suzuki.split(' '); for (let s of suteki) print(`!!!${s}!!!`); // Nunber 交じりの配列を合体すると文字列化される print(['GSX-R', 1000, 'R'].join(''));
テンプレートリテラル
もう文字列を + 記号で合体という読み辛いコードはヤメましょう
// 普通の変数を ${} で囲んで使います let val = 'シングルクォート'; // Python の r'' 同様にエスケープシーケンスを無視するには let raw = String.raw`この \n は改行されない`; // ヒアドキュメントとほぼ同様 print(`バッククォートで囲みます ${val}ではありません 改行部は普通に \\n になります ${raw}`); /* output バッククォートで囲みます シングルクォートではありません 改行部は普通に \n になります この \n は改行されない */
Copyright(C) sasakima-nao All rights reserved 2002 --- 2023.