From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../global_objects/string/split/index.html | 226 +++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 files/ja/web/javascript/reference/global_objects/string/split/index.html (limited to 'files/ja/web/javascript/reference/global_objects/string/split/index.html') diff --git a/files/ja/web/javascript/reference/global_objects/string/split/index.html b/files/ja/web/javascript/reference/global_objects/string/split/index.html new file mode 100644 index 0000000000..a62cb1ce48 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/string/split/index.html @@ -0,0 +1,226 @@ +--- +title: String.prototype.split() +slug: Web/JavaScript/Reference/Global_Objects/String/split +tags: + - JavaScript + - Method + - Prototype + - Reference + - Regular Expressions + - String + - プロトタイプ + - メソッド + - 正規表現 +translation_of: Web/JavaScript/Reference/Global_Objects/String/split +--- +
{{JSRef}}
+ +

split() メソッドは、 {{jsxref("String")}} を指定した区切り文字列で分割することにより、文字列の配列に分割します。

+ +
{{EmbedInteractiveExample("pages/js/string-split.html", "taller")}}
+ + + +

構文

+ +
str.split([separator[, limit]])
+ +

引数

+ +
+
separator {{optional_inline}}
+
+

分割を行うところにある文字列です。文字列または{{jsxref("Global_Objects/RegExp", "正規表現", "", 1)}}を指定することができます。

+ +
    +
  • separator が複数の文字を含んだ文字列である場合、分割にはその文字列の並び全体が見つかることが必要です。
  • +
  • separator が省略されたり str の中に現れなかったりした場合は、返却される配列には文字列全体から成る要素が1つだけ含まれます。
  • +
  • separator が文字列の先頭または末尾、またはその両方に現れた場合、配列の先頭、末尾、または先頭と末尾の両方が、それぞれ空文字列になります。
  • +
  • separator が空文字列 ("") の場合、 str は個々の UTF-16 「文字」の配列になります。
  • +
+ +
+

警告: 空文字列 ("") を区切り文字列として使用すると、文字列がユーザーが知覚可能な文字 (書記素クラスター) に分割されるわけではなく、 Unicode 文字 (コードポイント)、ただし UTF-16 コード単位です。これはサロゲートペアを破壊します。 StackOverflow の “How do you get a string to a character array in JavaScript?” を参照してください。

+
+
+
limit {{optional_inline}}
+
+

非負の整数で、分割する数を制限します。指定された場合、文字列は separator が現れるたびに分割されますが、 limit の数の項目が配列に配置されると停止します。残りのテキストは配列に入りません。

+ +
    +
  • 制限数に達する以前に文字列の末尾に達した場合は、配列の要素が limit よりも少なくなることがあります。
  • +
  • limit0 の場合は、分割は行われません。
  • +
+
+
+ +

返値

+ +

文字列の {{jsxref("Array")}} で、指定された文字列で separator が現れるたびに分割されたものです。

+ +

解説

+ +

separator は見つかると文字列から削除され、部分文字列が配列に入って返されます。

+ +

separator が、キャプチャする括弧を含む正規表現だった場合、 separator が一致するごとに、キャプチャする括弧の結果が (未定義の結果であった場合を含め) 出力配列に追加されます。

+ +

separator が配列であった場合、その配列が String に変換された上で区切り文字列として使用されます。

+ +

+ +

split() の使用

+ +
+

文字列が空の場合、 split() は空の配列ではなく、1つの空文字列を含む配列を返します。文字列と区切り文字列が共に空文字列の場合、空の配列が返ります。

+ +
const myString = ''
+const splits = myString.split()
+
+console.log(splits)
+
+// ↪ [""]
+
+
+ +

以下の例は、指定された区切りを使って、文字列を文字列の配列に分割する関数を定義します。文字列を分割した後、その関数は元の文字列(分割する前)、使用した区切り、配列中の要素の数、そして、個々の配列要素を示すメッセージを表示します。

+ +
function splitString(stringToSplit, separator) {
+  const arrayOfStrings = stringToSplit.split(separator)
+
+  console.log('元の文字列: ', stringToSplit)
+  console.log('区切り文字列: ' , separator)
+  console.log('配列の要素数は', arrayOfStrings.length, '件: ', arrayOfStrings.join(' / '))
+}
+
+const tempestString = 'Oh brave new world that has such people in it.'
+const monthString = 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'
+
+const space = ' '
+const comma = ','
+
+splitString(tempestString, space)
+splitString(tempestString)
+splitString(monthString, comma)
+
+ +

この例は次のような出力結果を生み出します。

+ +
元の文字列: "Oh brave new world that has such people in it."
+区切り: " "
+配列は 10 要素: Oh / brave / new / world / that / has / such / people / in / it.
+
+元の文字列: "Oh brave new world that has such people in it."
+区切り: "undefined"
+配列は 1 要素: Oh brave new world that has such people in it.
+
+元の文字列: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"
+区切り: ","
+配列は 12 要素: Jan / Feb / Mar / Apr / May / Jun / Jul / Aug / Sep / Oct / Nov / Dec
+
+ +

文字列からの空白の削除

+ +

以下の例では、split() は、0 回以上の空白とそれに続くセミコロン、それにさらに続く 0 回以上の空白を探し、それらが見つかったとき、文字列から空白を削除します。nameList は、split() の結果として返された配列です。

+ +
const names = 'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand '
+
+console.log(names)
+
+const re = /\s*(?:;|$)\s*/
+const nameList = names.split(re)
+
+console.log(nameList)
+
+ +

これは 2 つの行を出力します。1 行目は元の文字列を出力し、2 行目は split メソッドの実行結果の配列を出力します。

+ +
Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand
+[ "Harry Trump", "Fred Barney", "Helen Rigby", "Bill Abel", "Chris Hand", "" ]
+
+ +

限られた数の分割結果を返す

+ +

以下の例では、split() は 文字列中の 0 回以上の空白を探し、見つかった最初の 3 つの分割結果を返します。

+ +
const myString = 'Hello World. How are you doing?'
+const splits = myString.split(' ', 3)
+
+console.log(splits)
+
+ +

このスクリプトは以下の例を出力します。

+ +
["Hello", "World.", "How"]
+
+ +

RegExp で分割して結果に区切り文字列の一部を含める

+ +

separator がキャプチャの括弧 () を含む正規表現である場合、一致した結果が配列に含まれます。

+ +
const myString = 'Hello 1 word. Sentence number 2.'
+const splits = myString.split(/(\d)/)
+
+console.log(splits)
+
+ +

このスクリプトは、以下を表示します。

+ +
[ "Hello ", "1", " word. Sentence number ", "2", "." ]
+
+ +
+

メモ: \d文字クラスで、0から9の数字に一致します。

+
+ +

split() を使った文字列を反転

+ +
+

この手法は文字列を正しく反転できるとは限りません。

+ +
const str = 'asdfghjkl'
+const strReverse = str.split('').reverse().join('')
+// 'lkjhgfdsa'
+
+// split() が配列を返し、 reverse() および join() が適用できます
+
+ +

Unicode 対応の分割を使用している場合でも、文字列に書記素クラスターが含まれていると機能しません (代わりに esrever などを使ってください)。

+ +
const str = 'résumé'
+const strReverse = str.split(/(?:)/u).reverse().join('')
+// => "́emuśer"
+
+ +

ボーナス: {{jsxref("Operators/Comparison_Operators", "===", "#Identity_strict_equality_(===)")}} 演算子を使用すると、元の文字列が回文であるかどうかが判定できます。

+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-string.prototype.split', 'String.prototype.split')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.builtins.String.split")}}

+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf