これはsplit()
一般的にどのように機能するかです。ドットで次のものを分割しているとしましょう.
:
Hello.World
^
----- -----
返される配列は次のようになります["Hello", "World"]
。
前の行が次のような場合はどうなるでしょうか。
.World
^
-- -----
次に、次のような配列を取得します。この["", "World"]
メソッドsplit()
は、ドットの前の.
すべてと の後のすべてを返します。.
ドットの前には何も存在しない.
ため、空の string が返されます""
。
より大きな例では:
.Hello.World.From.
次のように返されます: ["", "Hello", "World", "From", ""]
.
あなたの状況で紛らわしい部分は、空の文字列を取得する方法ではなく、結果の配列で分割している文字をどのように取得するかです。
たとえば、 では.
ドットの周りを分割するとドット.
が.first
あり、 では#
ポンド記号の周りで分割するとポンド記号が存在#
し#last
ます。
これは、メソッドのドキュメントsplit()
を見ると明らかになります。
separator がキャプチャ用の括弧を含む正規表現である場合、separator が一致するたびに、キャプチャ用の括弧の結果 (未定義の結果を含む) が出力配列に結合されます。
あなたの場合のセパレーターは、キャプチャグループ内のドット、ポンド記号、またはコロンのいずれか/(#|\.|\[)/
に一致する(または分割する)正規表現であるため、結果の配列に追加されます。.
#
:
/(#|\.|\[)/
^ ^
---------
These parentheses are used to create the capturing group
次のように、キャプチャ グループを非キャプチャ グループに変換することで、これを解決できます。
/(?:#|\.|\[)/
^^
Notice the syntax
最後に 1 つ付け加えておきたいことが.first
あります。 のような状況では、#last
おそらく を使用したくないのですが、特定のパターンを使用して特定の一致を探したい場合です。split()
RegExp.exec()
String.match()
たとえば、次の.
ような文字の後の単語を取得する場合は、次のよう.first
にします。
var matches = ".first".match(/\.\w+/);