2012-03-08 5 views
0

JavaScript(と一般的には)で正規表現を使い始めたばかりで、私はGoogleを使って説明できないような奇妙なことがあります。多くの詳細に入るがなければ JavaScript正規表現一致最初の2つのインデックスとして入力を返す

、私は次の式を使用しています:

:以下にconsole.log出力で

sw: -27.990344 ne: 150.234562 

:のようなユーザー入力をマッチングさ

/(^sw:\s?(-?\d{1,3}.\d{1,6})\sne:\s?(-?\d{1,3}.\d{1,6})$)/i 

["sw: -27.345455 ne: 180.234567", "sw: -27.345455 ne: 180.234567", "-27.345455", "180.234567"] 

0 "sw: -27.345455 ne: 180.234567" 
1 "sw: -27.345455 ne: 180.234567" 
2 "-27.345455" 
3 "180.234567" 

index 0 
input "sw: -27.345455 ne: 180.234567" 

私の質問はですインデックス0と1はユーザが入力したものを返し、実際のデータはインデックス2と3として返されますか?

私はその表現に相対的ですが、それが正常な動作ではないことを十分に認識していません。

助けてください。

答えて

3

インデックス0は常に完全一致で、キャプチャグループはインデックスから開始しています。

キャプチャグループ

は、第1ブラケットがグループ1で開いて、その開口部ブラケットによって番号が付けられ、第2の開口部ブラケットは、グループ2、...である

あなたはあなたの完全な表現の周りにブラケットを持っているので、これは最初のキャプチャグループです。 ==>この外側の括弧は不要ですが、それらを削除してグループをインデックス1から開始できます。

グループの取得の詳細については、/www.regular-expressions.infoをご覧ください。これは正規表現についての非常に良い資料です。

2

あなたの答えは、正規表現がマッチグループを処理する方法にあります。ほとんどの実装では、グループ0には入力テキスト全体が含まれ、グループ1..nにはユーザー定義のグループ一致がすべて含まれます。しかし、あなたのケースでは、式全体を1つのグループにラップしているので、グループ1とグループ0は、一致が見つかると入力文字列全体を返します。

関連する問題