P147 Chapter15 文字列

【15.1 文字列を作成する】
・ダブルクォートとシングルクォートに意味的な違いはJavaScriptにはない。
・ES2015より、テンプレートリテラル(バッククォート`)が追加された。

【15.2 エスケープシーケンス】

エスケープシーケンス 意味
\' シングルクォート
\" ダブルクォート
\\ バックスラッシュ
\n 改行
\t タブ
\uXXXX Code Unit(\uと4桁のHexDigit)
\u{X} Code Point(\u{}のカッコ中にHexDigit)

【15.4 文字へのアクセス】
const str = "文字列";とした場合、str[0]、str[1]、etc...というアクセスが可能である。
インデックスの値は、0以上2^53 - 1未満の整数が指定可能である。

【15.5 文字列とは】
JavaScript(ECMA Script)は文字コードとして、Unicodeを採用し、文字をエンコードする方式としてUTF-16を採用している。
・String#charCodeAtメソッドで、文字列の指定インデックスのCode Unitを整数で返せる。

const str ="アオイ";
console.log(str.charCodeAt(0).toString(16)); // "30a2"

・Code Unitをhex値から文字列へと変換するにはString.fromCharCodeメソッドを使う。

const str = String.fromCharCode(
    0x30a2, // ア のCode Unit
    0x30aa, // オ のCode Unit
    0x30a4  // イ のCode Unit
);
console.log(str); // アオイ

ECMAScriptの内部表現としてUTF-16を用いているだけで、JavaScriptファイル自体のエンコードは、UTF-16以外の文字コードであっても問題ない。

【15.6 文字列の分解と結合】

const str1 = "赤・青・緑".split("・");
console.log(str1); // ["赤", "青", "緑"]

const str2 = "赤・青・緑".split("・").join("、");
console.log(str2); // "赤、青、緑"

const str3 = "a     b     c     d".split(/\s+/);
console.log(str3); // ["a", "b", "c", "d"]

【15.9 文字列の一部を取得】
・sliceメソッドもsubstringメソッドも非破壊的であり、どちらを利用するかはほぼ好みの問題

const str = "ABCDE";

console.log(str.slice(1)); // "BCDE"
console.log(str.slice(1, 5)); // "BCDE"
console.log(str.slice(-1)); // "E"
console.log(str.slice(1, 4)); // "BCD"
console.log(str.slice(4, 1)); // "" (第一引数 > 第二引数の場合は常に空文字列を返却)

console.log(str.substring(1)); // "BCDE"
console.log(str.substring(1, 5)); // "BCDE"
console.log(str.substring(-1)); // "ABCDE" (マイナスを指定すると0として処理)
console.log(str.substring(4, 1)); // "BCD" (第一引数 > 第二引数の場合、引数を反転させて処理[str.substring(1, 4)と等価])

・indexOfメソッドと扱うのもよくやる

const url = "https://example.com?param1";
const indexOfQuery = url.indexOf("?");
const queryString = url.slice(indexOfQuery);
console.log(QueryString); // "?param=1"

【15.10 文字列の検索】

const str = "にわにはにわにわとりがいる";
console.log(str.indexOf("にわ")); // 先頭インデックスを返すため0
console.log(str.lastIndexOf("にわ")); //  // 末尾のヒットした際の先頭文字のインデックスを返すため6(7文字目)
console.log(str.indexOf("さんわ")); // 指定した文字列が見つからない場合は-1

[真偽値の取得]
 ・String#startsWith(検索文字列):検索文字列が先頭に含むかの真偽値を返す
 ・String#endsWith(検索文字列):検索文字列が末尾に含むかの真偽値を返す
 ・String#includes(検索文字列):検索文字列を含むかの真偽値を返す

【15.11 正規表現オブジェクト】
[生成方法]
 ・const patternA = /パターン/フラグ; // 正規表現リテラルで生成
 ・const patternB = new RegExp("パターン", "フラグ"); //RegExpコンストラクタで生成

[正規表現リテラルRegExpコンストラクタで生成した場合の違い]
正規表現リテラルは静的なパターンの場合に利用する
RegExpは動的にパターンが変わる場合に利用する