サーチ…
構文
- "文字列リテラル"
- '文字列リテラル'
- "文字列リテラルと '不一致引用符'" //エラーはありません。引用符は異なる。
- ""エスケープされた引用符 "を持つ文字列リテラル" "//エラーはありません。引用符はエスケープされます。
- `テンプレート文字列$ {式}`
- String( "ab c")//コンストラクタ以外のコンテキストで呼び出されたときに文字列を返します
- new String( "ab c")//文字列プリミティブではなくStringオブジェクト
基本情報と文字列の連結
JavaScriptの文字列は、テンプレートリテラル( バッククォート )の`hello`
中で一重引用符'hello'
、二重引用符"Hello"
と(ES2015、ES6)で囲むことができます。
var hello = "Hello";
var world = 'world';
var helloW = `Hello World`; // ES2015 / ES6
ストリングは、 String()
関数を使用して他のタイプから作成することができます。
var intString = String(32); // "32"
var booleanString = String(true); // "true"
var nullString = String(null); // "null"
または、 toString()
を使用して数値、ブール値またはオブジェクトを文字列に変換できます。
var intString = (5232).toString(); // "5232"
var booleanString = (false).toString(); // "false"
var objString = ({}).toString(); // "[object Object]"
文字String.fromCharCode
メソッドを使用して作成することもできます。
String.fromCharCode(104,101,108,108,111) //"hello"
new
キーワードを使用してStringオブジェクトを作成することはできますが、プリミティブ文字列とは異なり、Objectのように動作するため、推奨されません。
var objectString = new String("Yes, I am a String object");
typeof objectString;//"object"
typeof objectString.valueOf();//"string"
ストリングの連結
文字列の連結は+
連結演算子で行うことも、Stringオブジェクトのプロトタイプに組み込みのconcat()
メソッドで行うこともできます。
var foo = "Foo";
var bar = "Bar";
console.log(foo + bar); // => "FooBar"
console.log(foo + " " + bar); // => "Foo Bar"
foo.concat(bar) // => "FooBar"
"a".concat("b", " ", "d") // => "ab d"
文字列は文字列以外の変数と連結できますが、文字列以外の変数は文字列に型変換します。
var string = "string";
var number = 32;
var boolean = true;
console.log(string + number + boolean); // "string32true"
文字列テンプレート
文字`hello`
テンプレートリテラル( バッククォート ) `hello`
を使って作成できます。
var greeting = `Hello`;
テンプレートリテラルでは、テンプレートリテラル内で${variable}
を使って文字列補間を行うことができます:
var place = `World`;
var greet = `Hello ${place}!`
console.log(greet); // "Hello World!"
String.rawを使用して、バックスラッシュを変更せずに文字列に入れることができます。
`a\\b` // = a\b
String.raw`a\\b` // = a\\b
引用符をエスケープする
あなたの文字列が一重引用符で囲まれている(つまり)場合は、内部の文字列引用符をバックスラッシュ \
var text = 'L\'albero means tree in Italian';
console.log( text ); \\ "L'albero means tree in Italian"
二重引用符も同じです:
var text = "I feel \"high\"";
HTML文字列は引用で大量に使用されるため、HTML表現をStringに格納する場合は、引用符をエスケープするために特に注意する必要があります。
var content = "<p class=\"special\">Hello World!</p>"; // valid String
var hello = '<p class="special">I\'d like to say "Hi"</p>'; // valid String
HTML文字列の引用符は、 '
(または'
)を一重引用符で、 "
(または"
)を二重引用符で囲みます。
var hi = "<p class='special'>I'd like to say "Hi"</p>"; // valid String
var hello = '<p class="special">I'd like to say "Hi"</p>'; // valid String
注: '
また"
ブラウザが自動的に属性の引用符を置くことができる二重引用符を上書きしません。たとえば、 <p class=special>
を<p class="special">
にする場合は、 "
<p class=""special"">
\"
は<p class="special">
ます。
文字列がある場合は'
と"
あなたは脱出する必要はありません( また、以前ES6エディションでテンプレート文字列として知られている )テンプレートリテラルを、使用して検討する必要があります'
と"
。これらは、一重引用符または二重引用符の代わりにバッククォート( `
)を使用します。
var x = `"Escaping " and ' can become very annoying`;
リバース文字列
JavaScriptで文字列を逆転させる最も一般的な方法は、次のコード部分です。これはかなり一般的です。
function reverseString(str) {
return str.split('').reverse().join('');
}
reverseString('string'); // "gnirts"
ただし、これは、反転された文字列にサロゲートペアが含まれていない場合にのみ機能します。アストラル記号、すなわち基本多言語面の外の文字は、2つのコード単位で表現され、この素朴な技法では間違った結果が生じることがあります。さらに、結合記号を有する文字(例えば、分音符号)は、それが結合された元の文字の代わりに、論理的な「次の」文字に現れる。
'𝌆■.'.split('').reverse().join(''); //fails
このメソッドはほとんどの言語でうまく動作しますが、文字列の逆転のための本当に正確でエンコーディングの厳しいアルゴリズムが関与しています。そのような実装の1つは、 Esreverと呼ばれる小さなライブラリです。逆ライブラリを完全に実行するために、結合マークとサロゲートペアを一致させるために正規表現を使用します。
説明
セクション | 説明 | 結果 |
---|---|---|
str | 入力文字列 | "string" |
String.prototype.split( deliminator ) | string str を配列に分割します。パラメータ"" は、各文字を分割することを意味します。 | ["s","t","r","i","n","g"] |
Array.prototype.reverse() | 分割された文字列からその要素を逆の順序で配列を返します。 | ["g","n","i","r","t","s"] |
Array.prototype.join( deliminator ) | 配列内の要素を結合して文字列にします。 "" パラメータは空のデリミネータを意味します(つまり、配列の要素は互いに隣り合って配置されます)。 | "gnirts" |
スプレッド演算子を使用する
function reverseString(str) {
return [...String(str)].reverse().join('');
}
console.log(reverseString('stackoverflow')); // "wolfrevokcats"
console.log(reverseString(1337)); // "7331"
console.log(reverseString([1, 2, 3])); // "3,2,1"
カスタムreverse()
関数
function reverse(string) {
var strRev = "";
for (var i = string.length - 1; i >= 0; i--) {
strRev += string[i];
}
return strRev;
}
reverse("zebra"); // "arbez"
空白を整える
文字列の端から空白をString.prototype.trim
、 String.prototype.trim
使用しString.prototype.trim
。
" some whitespaced string ".trim(); // "some whitespaced string"
多くのJavaScriptエンジンが、 いないInternet Explorerは 、非標準実装されているtrimLeft
とtrimRight
方法を。標準化されたtrimStart
とtrimEnd
メソッドについては、現在のところプロセスの第1段階にある提案があり、互換性のためにtrimLeft
とtrimRight
エイリアスがあります。
// Stage 1 proposal
" this is me ".trimStart(); // "this is me "
" this is me ".trimEnd(); // " this is me"
// Non-standard methods, but currently implemented by most engines
" this is me ".trimLeft(); // "this is me "
" this is me ".trimRight(); // " this is me"
スライス部分文字列
.slice()
を使用すると、2つのインデックスを持つ部分文字列を抽出できます。
var s = "0123456789abcdefg";
s.slice(0, 5); // "01234"
s.slice(5, 6); // "5"
1つのインデックスを指定すると、そのインデックスから文字列の末尾に移動します。
s.slice(10); // "abcdefg"
文字列を配列に分割する
.split
を使用して、文字列から分割された部分文字列に移動します。
var s = "one, two, three, four, five"
s.split(", "); // ["one", "two", "three", "four", "five"]
配列メソッド .join
を使用して文字列に戻ります。
s.split(", ").join("--"); // "one--two--three--four--five"
文字列はユニコードです
すべてのJavaScript文字列はUnicodeです!
var s = "some ∆≈ƒ unicode ¡™£¢¢¢";
s.charCodeAt(5); // 8710
JavaScriptには、生のバイトまたはバイナリ文字列はありません。バイナリデータを効果的に処理するには、 型付き配列を使用します。
文字列の検出
パラメータがプリミティブ文字列かどうかを検出するには、 typeof
:
var aString = "my string";
var anInt = 5;
var anObj = {};
typeof aString === "string"; // true
typeof anInt === "string"; // false
typeof anObj === "string"; // false
new String("somestr")
を使用してString
オブジェクトを作成した場合、上記は機能しません。この例では、instanceofを使用できinstanceof
。
var aStringObj = new String("my string");
aStringObj instanceof String; // true
両方のインスタンスをカバーするために、簡単なヘルパー関数を書くことができます:
var isString = function(value) {
return typeof value === "string" || value instanceof String;
};
var aString = "Primitive String";
var aStringObj = new String("String Object");
isString(aString); // true
isString(aStringObj); // true
isString({}); // false
isString(5); // false
あるいは、 Object
のtoString
関数を利用することもできます。このメソッドはtypeof
と同様に他のデータ型をサポートしているので、switch文で他の型をチェックする必要がある場合には、これは便利です。
var pString = "Primitive String";
var oString = new String("Object Form of String");
Object.prototype.toString.call(pString);//"[object String]"
Object.prototype.toString.call(oString);//"[object String]"
より堅牢なソリューションは、文字列をまったく検出せず、必要な機能性だけをチェックすることです。例えば:
var aString = "Primitive String";
// Generic check for a substring method
if(aString.substring) {
}
// Explicit check for the String substring prototype method
if(aString.substring === String.prototype.substring) {
aString.substring(0, );
}
文字列を辞書的に比較する
文字列をアルファベット順に比較するには、 localeCompare()
使用します。これは、参照文字列が比較文字列(パラメータ)の前に辞書的に(アルファベット順に)ある場合は負の値を返し、それ以降の場合は正の値を、等しい場合は0
値を返します。
var a = "hello";
var b = "world";
console.log(a.localeCompare(b)); // -1
>
と<
演算子を使って文字列を辞書的に比較することもできますが、値を返すことはできません(これは==
等価演算子でテストできます)。結果として、 localeCompare()
関数の形式は次のように書くことができます:
function strcmp(a, b) {
if(a === b) {
return 0;
}
if (a > b) {
return 1;
}
return -1;
}
console.log(strcmp("hello", "world")); // -1
console.log(strcmp("hello", "hello")); // 0
console.log(strcmp("world", "hello")); // 1
これは、戻り値の符号( sort
など)に基づいて比較するソート関数を使用する場合に特に便利です。
var arr = ["bananas", "cranberries", "apples"];
arr.sort(function(a, b) {
return a.localeCompare(b);
});
console.log(arr); // [ "apples", "bananas", "cranberries" ]
ストリングを大文字にする
String.prototype.toUpperCase():
console.log('qwerty'.toUpperCase()); // 'QWERTY'
文字列を小文字にする
String.prototype.toLowerCase()
console.log('QWERTY'.toLowerCase()); // 'qwerty'
ワードカウンター
<textarea>
あり、次の数についての情報を取得したいとします。
- 文字数(合計)
- 文字(スペースなし)
- 言葉
- ライン
function wordCount( val ){
var wom = val.match(/\S+/g);
return {
charactersNoSpaces : val.replace(/\s+/g, '').length,
characters : val.length,
words : wom ? wom.length : 0,
lines : val.split(/\r*\n/).length
};
}
// Use like:
wordCount( someMultilineText ).words; // (Number of words)
文字列内のインデックスにある文字にアクセスする
charAt()
を使用して、文字列内の指定されたインデックスにある文字を取得します。
var string = "Hello, World!";
console.log( string.charAt(4) ); // "o"
あるいは、文字列を配列のように扱うことができるので、 括弧表記でインデックスを使用します。
var string = "Hello, World!";
console.log( string[4] ); // "o"
指定されたインデックスにある文字の文字コードを取得するには、 charCodeAt()
使用します。
var string = "Hello, World!";
console.log( string.charCodeAt(4) ); // 111
これらのメソッドはすべてgetterメソッド(値を返す)であることに注意してください。 JavaScriptの文字列は不変です。言い換えれば、それらのどれも文字列内のある位置に文字を設定することはできません。
文字列の検索と置換
文字列内の文字列を検索するには、いくつかの関数があります。
indexOf( searchString )
およびlastIndexOf( searchString )
indexOf()
は、文字列中の最初のsearchString
インデックスを返します。 searchString
が見つからない場合、 -1
が返されます。
var string = "Hello, World!";
console.log( string.indexOf("o") ); // 4
console.log( string.indexOf("foo") ); // -1
同様に、 lastIndexOf()
はsearchstring
の最後の出現のインデックスを返します。見つからなければ-1
を返します。
var string = "Hello, World!";
console.log( string.lastIndexOf("o") ); // 8
console.log( string.lastIndexOf("foo") ); // -1
includes( searchString, start )
includes()
は、インデックスstart
(デフォルトは0)から検索文字列内にsearchString
が存在するかどうかをsearchString
ブール値を返します。これは、部分文字列の存在をテストするだけでよい場合は、 indexOf()
よりも優れています。
var string = "Hello, World!";
console.log( string.includes("Hello") ); // true
console.log( string.includes("foo") ); // false
replace( regexp|substring, replacement|replaceFunction )
replace()
は、 RegExp regexp
または文字列substring
文字substring
と一致する部分文字列がすべて文字列replacement
またはreplaceFunction
返された値を持つ文字substring
を返します。
これは、文字列を変更するのではなく、置換文字列を返します。
var string = "Hello, World!";
string = string.replace( "Hello", "Bye" );
console.log( string ); // "Bye, World!"
string = string.replace( /W.{3}d/g, "Universe" );
console.log( string ); // "Bye, Universe!"
replaceFunction
は、正規表現オブジェクトの条件付き置換( regexp
での使用)に使用できます。パラメータは次の順序になっています。
パラメータ | 意味 |
---|---|
match | 正規表現全体に一致する部分文字列g |
g1 、 g2 、 g3 、... | 正規表現内の一致するグループ |
offset | 文字列全体の一致のオフセット |
string | 文字列全体 |
すべてのパラメータはオプションであることに注意してください。
var string = "heLlo, woRlD!";
string = string.replace( /([a-zA-Z])([a-zA-Z]+)/g, function(match, g1, g2) {
return g1.toUpperCase() + g2.toLowerCase();
});
console.log( string ); // "Hello, World!"
文字列内の部分文字列のインデックスを見つける
.indexOf
メソッドは、別の文字列内にある部分文字列のインデックスを返します(存在する場合はそれを返します)。そうでない場合は-1を返します。
'Hellow World'.indexOf('Wor'); // 7
.indexOf
は、関数がどのインデックスを探し始めるべきかを示す追加の数値引数も受け入れます
"harr dee harr dee harr".indexOf("dee", 10); // 14
.indexOf
は大文字と小文字を区別します
'Hellow World'.indexOf('WOR'); // -1
数値の文字列表現
JavaScriptはNumberからStringへのネイティブ変換を行い、 2から36までの任意の基数を表す 。
10 進数( 10 進数 )の後の最も一般的な表現は16進数(16進数 )ですが、このセクションの内容はその範囲内のすべての塩基に対して機能します。
Numberを10進数(10進数)から16進数(16進数)に変換するには 、 toStringメソッドを基数16
で使用できます。
// base 10 Number
var b10 = 12;
// base 16 String representation
var b16 = b10.toString(16); // "c"
表現された数が整数の場合、逆演算はparseInt
と基数16
使って再び実行できます
// base 16 String representation
var b16 = 'c';
// base 10 Number
var b10 = parseInt(b16, 16); // 12
任意の数(つまり非整数)をString表現からNumberに変換するには、操作を2つの部分に分割する必要があります。整数部分と小数部分を含む。
let b16 = '3.243f3e0370cdc';
// Split into integer and fraction parts
let [i16, f16] = b16.split('.');
// Calculate base 10 integer part
let i10 = parseInt(i16, 16); // 3
// Calculate the base 10 fraction part
let f10 = parseInt(f16, 16) / Math.pow(16, f16.length); // 0.14158999999999988
// Put the base 10 parts together to find the Number
let b10 = i10 + f10; // 3.14159
注1:異なるベースで表現することが可能であることの違いにより、小さな誤差が結果として生じる可能性があるので注意してください。後である種の丸めを実行することが望ましい場合があります。
注2:数値の非常に長い表現は、変換が実行されている環境の数値の精度と最大値のためにエラーになる可能性があります。
文字列を繰り返す
これは.repeat()メソッドを使って行うことができます:
"abc".repeat(3); // Returns "abcabcabc"
"abc".repeat(0); // Returns ""
"abc".repeat(-1); // Throws a RangeError
一般的なケースでは、これはES6のString.prototype.repeat()メソッドの正しいポリフィルを使用して行う必要があります。それ以外の場合、イディオムnew Array(n + 1).join(myString)
は文字列myString
n
回繰り返すことができます。
var myString = "abc";
var n = 3;
new Array(n + 1).join(myString); // Returns "abcabcabc"
文字コード
charCodeAt
メソッドは、1文字のUnicode文字コードを取得します。
var charCode = "µ".charCodeAt(); // The character code of the letter µ is 181
文字列内の文字の文字コードを取得するには、文字の0からcharCodeAt
位置がcharCodeAt
パラメータとして渡されます。
var charCode = "ABCDE".charCodeAt(3); // The character code of "D" is 68
一部のUnicodeシンボルは1文字に収まらず、代わりに2つのUTF-16サロゲートペアをエンコードする必要があります。これは、2 16 - 1または63553を超える文字コードの場合です。これらの拡張文字コードまたはコードポイント値は、 codePointAt
で取得できます。
// The Grinning Face Emoji has code point 128512 or 0x1F600
var codePoint = "😀".codePointAt();