文書の過去の版を表示しています。
— y2sunlight 2021-07-26
Stringオブジェクトは文字列型( string )を扱うためのラッパーオブジェクトです。
本章では、文字列の操作の種類毎に主メソッドの例を示します。文字列の操作には以下の様なものがあります。
Stringオブジェクトはコンストラクタによって以下の様に生成されます。
let string= new String(1); console.log(typeof(string)); // object
このコンストラクタは Stringオブジェクトを返しますが、あまり使用されることはなく、String() 関数の方が良く使用されます。
let string= String(1); console.log(typeof(string)); // string
両者の違いは、Stringオブジェクトを返すか、基本データ型( string )を返すかの違いであり、厳密には異なりますが、実務上それは意識する必要がほとんどありません。
JavaScriptの文字列型( string )は、文字コードとしてUTF-16を採用しています。クライアントサイドでの通常の文字列操作では文字コードを意識せずに使用できますが、クライアントサイドでAPIを使用したり、サーバサイドでファイルアクセスしたりする場合には、UTF-16を意識しないといけない場面があります。このような場合は、UTF-16との変換メソッド( fromCharCode() と fromCodePoint() )を使用して下さい。
UTF-16とは、2バイトで表現できる文字はそのまま2バイトで表現し、それ以外の文字は4バイトで表現したコードです。
日本語の場合、UTF-8とは異なり英数は2バイトで表現されますが、漢字も2バイトで表現できます。従って、漢字の割合が多い場合はUTF-16の方が効率が良いコードになっています。
以下に主な Stringオブジェクトの静的メソッドの使用例を示します。詳しくはMDNをご覧下さい。
String.fromCharCode(num1[, ...[, numN]])
文字コード(UTF-16)の値を引数の列に指定し、文字列を生成します。
let s = String.fromCharCode(0x48, 0x65, 0x6c, 0x6c, 0x6f); console.log(s); // Hello
英数字は上例の様に、見た目はUTF-8と同じですが、実際には2バイトの数字になっています。以下は漢字の場合の例です。
let s = String.fromCharCode(0x3053, 0x3093, 0x306b, 0x3061, 0x306f); console.log(s); // こんにちは
Unicodeの符号位置(コードポイント)とは文字集合内の文字の位置を表し、0 以上の整数値が割り付けられています。コードポイントを表現する時、U+
の後に16進で整数値を表記します。例えば「語」の場合、U+8A9E
になります。
コードポイントの一覧はこちらを参照して下さい。
Unicodeポイントの符号化方式としては、UTF-8、UTF-16、UTF-32などがあります。
JavaScriptではUTF-16が採用されています。
UTF-32では、符号とコードポイントが同じ値になりますが、それ以外は複雑なルールでコードポイントから符号が決定されます。
console.log(String.fromCodePoint(0x8A9E)); // 語
生のテンプレート文字列から生成した文字列を返します。詳しくはMDNをご覧下さい。
以下に主な Stringオブジェクトのインスタンスプロパティの使用例を示します。詳しくはMDNをご覧下さい。
文字列の length を反映します。読み取り専用です。
let str = "こんにちは。佐藤さん。"; console.log(str.length); // 11
以下に主な Stringオブジェクトのインスタンスメソッドの使用例を示します。詳しくはMDNをご覧下さい。
str.toString()
指定されたオブジェクトの文字列を返します。Object.prototype.toString() メソッドを上書きします。詳しくはMDNをご覧下さい。
let str = "こんにちは"; console.log(str.toString()); // こんにちは
str.valueOf()
指定されたオブジェクトのプリミティブ値(string型の値)を返します。 Object.prototype.valueOf() メソッドを上書きします。詳しくはMDNをご覧下さい。
let str = "こんにちは"; console.log(str.valueOf()); // こんにちは
str.toLowerCase()
小文字に変換された文字列を返します。詳しくはMDNをご覧下さい。
let str = "HELLO, SATO."; console.log(str.toLowerCase()); // hello, sato.
str.toUpperCase()
大文字に変換された文字列を返します。詳しくはMDNをご覧下さい。
let str = "hello, sato."; console.log(str.toLowerCase()); // HELLO, SATO.
referenceStr.localeCompare(compareString[, locales[, options]])
referenceStr と compareString を比較し、referenceStr の方が小さい場合は負数(-1)を、同じ場合は0を、大きい場合は正値を返します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.localeCompare('こんばんは')); // -1 "こんにちは"<"こんばんは"
str.trim()
文字列の先頭と末尾にある空白を削除します。詳しくはMDNをご覧下さい。
let str = " こんにちは "; console.log(str.trim()); // "こんにちは"
str.trimStart()
文字列の先頭にある空白を削除します。詳しくはMDNをご覧下さい。
let str = " こんにちは "; console.log(str.trimStart()); // "こんにちは "
str.trimEnd()
文字列の末尾にある空白を削除します。詳しくはMDNをご覧下さい。
let str = " こんにちは "; console.log(str.trimEnd()); // " こんにちは"
str.includes(searchString[, position])
文字列中に searchString が含まれているかを返します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.includes('佐藤')); // true
str.indexOf(searchValue [, fromIndex])
呼び出す String オブジェクト中で、 searchValue が最初に現れる位置を返します。見つからなかった場合は -1 を返します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.indexOf('佐藤')); // 6
lastIndexOf(searchValue) lastIndexOf(searchValue, fromIndex)
呼び出す String オブジェクト中で、 searchValue が最後に現れる位置を返します。見つからない場合は -1 を返します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.lastIndexOf('佐藤')); // 6
str.startsWith(searchString[, position])
呼び出した文字列が文字列 searchString で開始されているかを判断します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.startsWith('。')); // false
str.endsWith(searchString[, length])
文字列の末尾に指定された文字列 searchString が含まれているかを返します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.endsWith('。')); // true
str.substring(indexStart[, indexEnd])
呼び出した文字列の指定された位置以降 (または区間) にある文字が入った新しい文字列を返します。詳しくはMDNをご覧下さい。
str.concat(str2 [, ...strN])
2つ(以上)の文字列を連結し、新しい文字列を返します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.concat('鈴木さん。', '高橋さん。')); // こんにちは。佐藤さん。鈴木さん。高橋さん。
str.padStart(targetLength [, padString])
現在の文字列の先頭から指定した文字列で埋めた、長さ targetLength 文字の新たな文字列を作成します。詳しくはMDNをご覧下さい。
str.padEnd(targetLength [, padString])
現在の文字列の末尾から指定された文字列で埋めた、長さ targetLength 文字の新たな文字列を返します。詳しくはMDNをご覧下さい。
str.match(regexp)
文字列に対して正規表現 regexp を指定し、合致した部分文字列を取得します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.match(/。/g)); // ["。", "。"]
replace(regexp, newSubstr)
文字列に対して正規表現 regexpを使用し、合致した部分をnewSubstrで置換して返します。newSubstr には置換文字列を生成するための関数を指定することもできます。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.replace(/佐藤/g, '鈴木')); // こんにちは。鈴木さん。
const newStr = str.replaceAll(regexp|substr, newSubstr|function)
searchFor が現れたところすべてを replaceWith で置換するために使用します。 searchFor は文字列または正規表現であり、 replaceWith は文字列または関数です。詳しくはMDNをご覧下さい。
str.search(regexp)
文字列に対してい正規表現 regexp を使用し、合致した最初の文字列の位置を取得します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.search(/佐藤/g)); // 6
let character = str.charAt(index)
指定された位置の文字 (UTF-16 コード 1 つから成ります) を返します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.charAt(6)); // 佐
str.charCodeAt(index)
与えられた位置の文字の UTF-16 の値を示す数を返します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.charCodeAt(6)); // 20304
str.codePointAt(pos)
指定された位置から始まる UTF-16 エンコードされた際のコードポイントの、コードポイントの値である正の整数を返します。詳しくはMDNをご覧下さい。
let str = "こんにちは。佐藤さん。"; console.log(str.codePointAt(6)); // 20304