JavaScript
string
ゼロから総復習

Javascript 索引 ~ Javascriptゼロから総復習してやるぜ!! ~ String編

String(文字列)

文法

"ABCdef1234"
'ABCdef1234'

`ABCdef1234`

new String("ABCdef1234")

注: ` ` テンプレートリテラル と呼びます。

エスケープ文字

" ' で囲った文字の中に " 'を入れたいとき、

"ダブル"クォーテーション"
'シングル'クォーテーション'

のようにしてはいけません。

そのときは、\" \'のように、その文字の前に\をつけて
あらわし、その文字のことをエスケープ文字と呼びます。

"ダブル\"クォーテーション"
'シングル\'クォーテーション'

またこのようなエスケープ文字もあります。

エスケープ文字 意味
\0 null
\' シングルクォート (')
\" ダブルクォート (")
\\ バックスラッシュ (\) (\自体を表したい場合)
\n ニューライン (改行コード)
\r キャリッジリターン (復帰文字)
\v 垂直タブ
\t 水平タブ
\b バックスペース
\f フォームフィード
\nnn 8進数による文字コード指定 (例: "A" => "\101", "b" => "\142")
\xnn 16進数による文字コード指定 (例: "A" => "\x41", "b" => \x62)
\unnnn Unicode文字 (例: "あ" => "\u3042", "い" => "\u3044")
console.log("一行目\n二行目");

他の言語とは異なり、JavaScript はシングルクォートに囲まれた文字列とダブルクォートに囲まれた文字列に違いはありません。したがって、エスケープシーケンスはシングルクォート内でもダブルクォート内でも差異なく実行されます。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String

長い文字

// パターン1: + で結合
"Lorem ipsum dolor sit amet." +
"Culpa necessitatibus quasi architecto id." +
"Officia, facilis sed earum sequi."

// パターン2: \ で次行に続くことを示す
"Lorem ipsum dolor sit amet.\
Culpa necessitatibus quasi architecto id.\
Officia, facilis sed earum sequi."

プロパティ

文字列の長さ

  • string.length
let str = "ABCDEF";

console.log(str.length); // 6

プロトタイプメソッド

文字列の一部の取り出し

index 文字目の取り出し (charAt)

  • string.charAt( index )
  • 最初の文字が0
  • stringindex 文字目を返す。
    • index が渡されなかった場合、0とする。
    • index が範囲外なら、空文字を返す。
let str = "ABCDEF";

console.log(str.charAt( 4 )); // "D"

from ~ to の文字列の取り出し (substring)

  • string.substring( from [, to ])
  • 最初の文字が0
  • stringfrom ~ to - 1 文字目を返す。
    • from 又は to に負の値を指定すると、0番目とされる。
    • to を省略すると、from から最後まで(残りの全て)を取り出す。
let str = "ABCDEF";

console.log(str.substring(0, 1)); // "A"
console.log(str.substring(0, 3)); // "ABC"

console.log(str.substring(4, str.length)); // "EF"
console.log(str.substring(4)); // "EF"

from ~ to の文字列の取り出し (slice)

  • string.slice( from [, to ])
  • 最初の文字が0
    • stringfrom ~ to - 1 文字目を返す。
    • 負の値を指定すると、後ろから数えた位置とされる。
    • to を省略すると、 from から最後まで(残りの全て)を返す。
let str = "ABCDEF";

// <ここから↓

console.log(str.slice(0, 1)); // "A"
console.log(str.slice(0, 3)); // "ABC"

console.log(str.slice(4, str.length)); // "EF"
console.log(str.slice(4)); // "EF"

// ここまで↑/> は substring と同じ

console.log(str.slice( 0, -3)); // "ABC"
console.log(str.slice(-3, -1)); // "DE"
console.log(str.slice(-3)); // "DEF"

from から length 文字分切り取る (substr)

  • string.substr( from [, length ])
  • 最初の文字が0
  • stringfrom から length 文字分返す。
    • from負の値を指定すると、後ろから数えた位置とされる。
    • length を省略すると、 from から最後まで(残りの全て)を返す。
let str = "ABCDEF";

console.log(str.substr(0, 1)); // "A"
console.log(str.substr(0, 3)); // "ABC"

console.log(str.substr(3)); // "DEF"
console.log(str.substr(4)); // "EF"

文字列の整形・操作

string の空白の削除 (trim, trimStart, trimEnd)

  • string.trim()
  • string.trimStart()
  • string.trimEnd()
  • string の...
    • trim は前後の...
    • trimStart は先頭の...
    • trimEnd は末尾の...
  • 空白文字(スペース,タブ,ノーブレークスペースなど)とすべての改行文字(LF,CRなど)を含め除去した文字を取り出す。
let str1 = "  ABC";
let str2 = "ABC  ";
let str3 = "   ABC   ";

console.log(str1.trim()); // "ABC"
console.log(str2.trim()); // "ABC"
console.log(str3.trim()); // "ABC"

console.log(str1.trimStart()); // "ABC"
console.log(str2.trimStart()); // "ABC  "
console.log(str3.trimStart()); // "ABC  "

console.log(str1.trimEnd());   // "  ABC"
console.log(str2.trimEnd());   // "ABC"
console.log(str3.trimEnd());   // "  ABC"

パディング (padStart, padEnd)

  • string.padStart( targetLength[, padString])
  • string.padEnd( targetLength[, padString])
  • stringtargetLength に到達するよう、
  • padStart は先頭に、 padEnd は末尾に、
  • padString を追加する(埋める)。
    • padString を指定しなかった場合、 " " とする。
let str1 = "ABCDEF";
let str2 = "123456";

console.log(str1.padStart(10));      // "    ABCDEF"
console.log(str1.padEnd(10, ".")); // "ABCDEF...."

console.log(str2.padStart(8, "0"));  // "00123456"

文字列の繰り返し (repeat)

  • string.repeat( count )
  • stringcount 回繰り返した文字列を返す。
    • count が小数なら整数に丸める
    • count が負の数、無限などならエラーを投げる
let str = "ABC";

str.repeat(0);   // ""
str.repeat(1);   // "ABC"
str.repeat(2);   // "ABCABC"

str.repeat(3.5); // "ABCABCABC"

str.repeat(-1);  // throw RangeError: repeat count must be positive and less than inifinity
str.repeat(1/0); // throw RangeError: repeat count must be positive and less than inifinity

文字列の小文字・大文字の変換 (toUpperCase, toLowerCase)

  • string.toUpperCase()
  • string.toLowerCase()
  • stringtoUpperCase は大文字、 toLowerCase は小文字に変換した文字列を返す。
let str = "AbCdeF";
str.toUpperCase(); // "ABCDEFG"
str.toLowerCase(); // "abcdefg"

文字列の分割・結合

文字列の分割 (split)

  • string.split([ separator [, limit ]])
  • stringseparator で区切り、配列に分割して返す。
    • separator を省略した場合、 string のみを含む配列を返す。
    • [ string ]
  • limit で返す配列の要素の最大数を指定できる。
    • 指定しなかった場合、全て返す。
let str1 = "abc,def,ghi,jkl";
let str2 = "abc def ghi jkl";
let str3 = "abc0def0ghi0jkl";

console.log(str1.split(","));      // ["abc", "def", "ghi", "jkl"]
console.log(str2.split(" ", 3));   // ["abc", "def", "ghi"]
console.log(str3.split( 0 , 100)); // ["abc", "def", "ghi", "jkl"]

文字列の結合 (concat)

  • string.concat( string2 [, string3, ..., stringN])
  • stringstring2 ... stringN を連結して返す
  • 普通に連結するなら素直に + 使ったほうがスピード的にはいい。
let str1 = "abc";
let str2 = "def";
let str3 = "ghi";

console.log(str1.concat(str2));       // "abcdef"
console.log("".concat(str1, str2));   // "abcdef"
console.log(str1.concat(str2, str3)); // "abcdefghi"

文字列の検索

indexOf, lastIndexOf (インデックスを返す)

  • string.indexOf( searchValue, fromIndex)
  • string.lastIndexOf( searchValue, fromIndex)

  • stringfromIndex から検索をはじめ、指定された値が最初に現れた位置(インデックス)を返す。

  • indexOf は先頭から、 lastIndexOf は末尾から検索を開始する。

let str = "I want a book.";

console.log(str.indexOf("a"));
console.log(str.lastIndexOf("a"));

search (正規表現で検索, インデックスを返す)

  • string.search( regexp )
  • string から regexp にマッチする部分のインデックスを返します。
let str = "I want a book.";

console.log(str.search(/a/)); // 3

match (正規表現で検索, 文字列を返す)

  • string.match( regexp )
  • string から regexp にマッチする部分の文字列を返します。
  • マッチする部分がなかった場合は null を返す。
let str = "I want a book.";

console.log(str.match(/a [^\.]*/)); // ["a book"]

条件の判定

指定した文字で始まっているか・終わっているか (startsWith, endsWith)

  • string.startsWith( searchString[, position ])
  • string.endsWith ( searchString[, position ])
  • stringsearchString で...
    • 始まっている・終わっている => true
    • 始まっていない・終わっていない => false
  • position を指定すると、その長さであるとする。
let str = "I want a book.";

console.log(str.endsWith("book"));     // false
console.log(str.endsWith("."));        // true
console.log(str.endsWith("book", 13)); // false

指定した文字を含んでいるか (includes)

  • string.includes( searchString[, position])
  • string の中に searchString が...
    • 含まれている => true
    • 含まれていない => false
  • position を指定すると、そこから検索し始める。
let str = "I want a book.";

console.log(str.includes("They"));     // false
console.log(str.includes("want"));     // true
console.log(str.includes("want", 10)); // false

文字列の置換 (replace)

  • string.replace( regexp | substr, newString | function)
  • string から regexp (又は substr) にマッチする部分を
  • newString (又は function の返り値) に置き換えた文字列を返す。
let str = "I want a book.";

console.log(str.replace("book", "pen")); // "I want a pen."
console.log(str.replace(/(I) (want)/, (str, s1, s2)=>["He", s2 + "s"].join(" ")));

文字コードの操作

文字列から文字コードへの変換 (charCodeAt)

  • string.charCodeAt( index )
  • 最初の文字を 0 とする
  • stringn 番目の文字の文字コードを返す。
let str1 = "ABCDEFG";
let str2 = "あいうえお";

console.log(str1.charCodeAt(0)); // 65 ("A"のASCII文字コード)
console.log(str2.charCodeAt(0));

文字コードから文字列への変換 (fromCharCode)

  • String.fromCharCode( num1[, ..., numN ])
  • num1 ... numN に対応する文字列を返す。
console.log(String.fromCharCode(0x41, 0x42, 0x43, 0x61, 0x62, 0x63)); // "ABCabc"

(toLocaleLowerCase, toUpperCase)

執筆中 どう書けばいいかわからん
コメントください。

(localeCompare)

執筆中 どう書けばいいかわからん
コメントください。

(normalize)

執筆中 どう書けばいいかわからん
コメントください。