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 --- 2025.