5

私はこのような文字列を持っています

FOO hello world
BAR something else
BISCUIT is tasty
CAKE is tasty too

目標は、最初の単語の後に文字列を1回分割することです。これまで私はこれを使用しています

# coffeescript
raw = 'FOO hello world'
parts = raw.split /\s/
[command, params] = [parts.shift(), parts.join(' ')]
command #=> FOO
params #=> hello world

私は2つの理由でこれが好きではありません:

  1. 非効率的なようです
  2. 文字列を文字で再結合しています' '' '実際の文字列パラメータはaまたはaのいずれかで分割できますが\t、元のパラメータはそのままにしておきます。

何か案は?

4

6 に答える 6

5

これを試してみてください:

[ command, params ] = /^([^\s]+)\s(.*)$/.exec('FOO hello world').slice(1);
于 2012-12-16T20:09:59.017 に答える
5

indexOfスペースを見つけるために使用できます(-のために\t-別々に処理し、2つのインデックスの小さい方を選択します)そしてsliceそこに:

var command;
var params = '';
var space = raw.indexOf(" ");
if(space == -1) {
    command = e.data;
} else {
    command = raw.slice(0, space);
    params = raw.slice(space + 1);
}

また、正規表現を使用しないため、はるかに高速です。

于 2012-12-16T20:13:23.773 に答える
2

不要な変数のない@NathanWallの回答のバリアント:

 [command, params] = /([^\s]+)\s(.+)/.exec('FOO hello world').slice(1)
于 2012-12-16T20:12:43.387 に答える
0

ここに簡単なコード:

var t = "FOO hello world";
var part1 = t.match(/(\w+\s)/)[0];
var part2 = t.replace(part1,"");

part1 には「FOO」が含まれ、part2 には「hello world」が含まれます。

于 2012-12-16T20:18:41.103 に答える
-2

別のオプションは次のとおりです。

# coffeescript
raw = 'FOO hello world'
[command, params] = raw.split(/\s/, 2)
command #=> FOO
params #=> hello world

元のコードよりもセマンティックに見えません。

于 2012-12-16T20:17:32.680 に答える