Paepoi » JavaScript Tips » JavaScript String
JavaScript String
# 最終更新日 2024.01.03
文字列操作
切り出し方法が三つもあるけど気にしないことにしよう
/* * 切り出し */ const STR = '漢字も一文字だもん!'; let a = STR.slice(3, 6); // (開始位置 ,終了位置) let c = STR.substring(3, 6); // (開始位置 ,終了位置) let b = STR.substr(3, 3); // (開始位置 ,切り出す長さ) console.log(`${a}, ${b}, ${c}`); //=> 一文字, 一文字, 一文字 console.log(STR.slice(3)); // (開始位置のみ指定) //=> 一文字だもん! console.log(STR.slice(-4)); // (後方からマイナス指定) //=> だもん! /* * 検索 */ STR.startsWith('漢字'); // 最初はコレで始まっているか //=>true STR.endsWith('もん!'); // 最後はコレで終わっているか //=>true STR.indexOf('も'); // 最初の出現位置、存在しなければ -1 が戻る //=>2 STR.lastIndexOf('も'); // 最後の出現位置、存在しなければ -1 が戻る //=>7 STR.includes('もん'); // 含まれている? //=>true /* * 大文字化、小文字化 */ console.log('ABCdef'.toLowerCase()); //=>abcdef console.log('ABCdef'.toUpperCase()); //=>ABCDEF /* * 前後の空白や最後の改行を取り除く * 前方のみなら trimStart、後方のみなら trimEnd を使う */ let f = ' aa bb cc \n'; console.log(f.trim()); //=> 'aa bb cc' // ゼロ詰め '7'.padStart(4, '0'); //=> '0007'
文字列変換
第一引数で挙動が変わる
let strs = `パナライカのレンズは美しい パナライカのレンズはカワイイ パナライカのレンズをペロペロしたい`; // 第一引数が文字列なら最初に一致した語句のみ変換 console.log(strs.replace('パナライカのレンズ', '五条川のカワセミ')); // replaceAll が ES2021 で追加、Fedora 35 の Gjs は対応済 console.log(strs.replaceAll('パナライカのレンズ', '隣のお姉さん')); // 第一引数は正規表現でもいい、g 指定ならマッチしたすべての語句を変換 console.log(strs.replace(/パナライカのレンズ/g, '君のウンコ'));
ファイル名
正規表現での方法、Windows ならスラッシュを置き換え
let fullpath = '/home/sasakima-nao/OM SYSTEM/OM-1 とパナライカ.jpg'; let regexps = { 'ファイル名': /[^/]+$/, 'パス名': /^.*\//, '拡張子': /[^.]+$/ }; for (let kwd in regexps) { let output = fullpath.match(regexps[kwd])[0]; console.log(`${kwd}: ${output}`); }
UTF-8 との相互変換
JXA では使えません、というか Uint8Array を使う機会がありません
let str = '文字列をUTF-8に'; // Uint8Array に変換 let encoder = new TextEncoder(); let u8arr = encoder.encode(str); console.log(u8arr); // JavaScript 文字列に変換 let decoder = new TextDecoder(); let jsStr = decoder.decode(u8arr); console.log(jsStr);
コードポイント
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 '🎴あ⛔') console.log(s); // bash のように空白区切りにしたい場合は配列化 let suzuki = 'パナライカの レンズは カッコイイ'; let suteki = suzuki.split(' '); for (let s of suteki) console.log(`!!!${s}!!!`); // Nunber 交じりの配列を合体すると文字列化される console.log(['GSX-R', 1000, 'R'].join(''));
テンプレートリテラル
もう文字列を + 記号で合体という読み辛いコードはヤメましょう
// 普通の変数を ${} で囲んで使います let val = 'シングルクォート'; // Python の r'' 同様にエスケープシーケンスを無視するには let raw = String.raw`この \n は改行されない`; // ヒアドキュメントとほぼ同様 console.log(`バッククォートで囲みます ${val}ではありません 改行部は普通に \\n になります ${raw}`); /* output バッククォートで囲みます シングルクォートではありません 改行部は普通に \n になります この \n は改行されない */
Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.