0

私は文字列を持っています

var str = "2 Days, 2 Hours 10 Minutes";

もし私が :

str.split(/Days/);

私は得る:

["2 ", ", 2 Hours 10 Minutes"]

したがって、string.splitを使用して文字列を分割し、このメソッドで「日」、「時間」、「分」を取得できると思います。

ただし、「s」がある場合とない場合はどうすればよいですか。たとえば、次のようになります。

var str = "1 Day, 2 Hours 10 Minutes";

ここで、私の文字列は「2日」ではなく「1日」であるため、「日」の値に「s」がありません。文字列を分割する方法はありますか

Day(s)
Hour(s)
Minute(s)
4

3 に答える 3

2

正規表現を使用して分割を行っているため、「s」の後に疑問符を付けてオプションにします。

str.split(/Days?/);

i正規表現にフラグを追加して、大文字と小文字を区別しないようにすることもできます。

str.split(/days?/i);

次のように (の代わりに) matchstring メソッドを使用して、1 行ですべてを行うこともできます。split

("2 Days, 3 hours, 5 minutes").match(/(\d+)\s*days?\,?\s*(\d+)\s*hours?\,?\s*(\d+)\s*minutes?/i)

次のような配列が返されます。

["2 Days, 3 hours, 5 minutes", "2", "3", "5"]

したがって、位置 1、2、および 3 の項目は、それぞれ日、時間、および分です。

その正規表現を英語に分解するには:

  • (キャプチャされたグループ、つまり配列項目 1) 1 桁以上
  • 0 個以上の空白文字
  • オプションの
  • オプションのカンマ
  • ゼロまたはそれ以上の空白文字...そして何時間も何分も繰り返します。

文字列の正規表現マッチングについてはこちらのドキュメントを、正規表現の使用方法についてはこちらのドキュメントを確認してください。

于 2012-12-03T15:03:17.330 に答える
1

もちろん:

str.split(/Days?/);
str.split(/Hours?/);
str.split(/Minutes?/);
于 2012-12-03T15:02:36.410 に答える
1

日/時間/分を単一の 3 要素配列に取得しようとしていて、入力が常に値を持つことを保証できる場合 (その値が 0 の場合でも)、数値以外のすべてを根絶する方が簡単な場合があります。と非スペース、次にスペースで分割し、空の要素を削除します。

var result = new Array();
var tempstr = str.replace(/[^0-9\s]/g, ''); 
var arr = tempstr.split(' ');

for(var i = 0; i<arr.length; i++) {
    if (arr[i]) {
        result.push(arr[i]);
    }
}

注:この SO Postから割り当てられた配列クリーニング ループ。

于 2012-12-03T15:13:53.453 に答える