0

出力用に分割する必要がある次のスティング入力があります。例1.5 ccまたは1.5cc 次のコードを使用して、入力文字列を区切るスペースに基づいて、現在これを行っています。

var immunization = msg['dose_size'].toString().trim();
immunization = immunization.split(' ');
var amount = immunization[0];
var unit = immunization[1];

ただし、テストでは、入力が常にそのようにフォーマットされているとは限らず、スペースが欠落している場合があるという事実に遭遇しました。したがって、スペースのない入力の出力は 1.5cc で、2 番目の出力は空です。

\d*.?\d+ のような正規表現を使用してみましたが、それは機能しますが、1.5 で一致が検出されるため、最初の出力では空の値が取得され、2 番目の出力では "cc" が取得されます。両方が必要です。 .

助言がありますか?

ありがとう。

4

1 に答える 1

1

このコードを使用してデータを取得できます。

/(\d+(?:\.\d*)?|\.\d+)\s*(\S+)/.exec(inputString)
  • (\d+(?:\.\d*)?|\.\d+)3410 進数に一致し、 integer 、通常の 10 進数を受け入れ、およびを渡す34.555こともできます。.55554533.

  • \s*一致するオプションのスペースが続きます。

  • 続いて(\S+)、次のトークン (スペース文字なし) を照合してキャプチャします。

一致する場合は、配列を返します。配列のインデックス 1 は 10 進数、配列のインデックス 2 は単位です。

于 2012-07-17T14:16:36.710 に答える