Paepoi

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