【问题标题】:How to split javascript string into a max of 2 parts?如何将javascript字符串拆分为最多2部分?
【发布时间】:2012-12-04 00:13:09
【问题描述】:

我有这样的字符串

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

目标是在第一个单词之后拆分字符串一次。到目前为止我正在使用这个

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

我不喜欢这个有两个原因:

  1. 似乎效率低下
  2. 我正在重新加入带有' ' 字符的字符串。真正的字符串参数可以用' '\t 分割,我想保留原件。

有什么想法吗?

【问题讨论】:

    标签: javascript string coffeescript


    【解决方案1】:

    试试这个:

    [ command, params ] = /^([^\s]+)\s(.*)$/.exec('FOO hello world').slice(1);
    

    【讨论】:

    • 我会将此答案标记为已接受,但请调整它以使用 @ualinker 所使用的 .slice(1) 以处理一次性变量。
    【解决方案2】:

    您可以使用indexOf 查找空间(对于\t - 单独处理并选择两个索引中较小的一个),然后在此处使用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);
    }
    

    此外,它更快,因为它不使用正则表达式。

    【讨论】:

      【解决方案3】:

      @NathanWall 答案的变体,没有不必要的变量:

       [command, params] = /([^\s]+)\s(.+)/.exec('FOO hello world').slice(1)
      

      【讨论】:

      • 哦,这就是你所说的。谢谢。
      【解决方案4】:

      这里有一个简单的代码:

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

      part1 将包含 "FOO" 和 part2 "hello world"

      【讨论】:

      • 这非常危险。如果 FOO 这个词出现在参数中的其他任何地方,它也会被删除。
      • 不,“FOO hello FOO world”会返回“FOO”和“hello FOO world”,它不会替换所有的FOO,只会替换第一个
      • 我刚刚在 chrome 的控制台中测试了它。 Solisoft 是对的:"abac".replace("a", "*") 给你"*bac"(我绝对确定它会给你"*b*c"!)。您必须使用带有替换的正则表达式才能替换所有匹配项。
      【解决方案5】:

      我会这样做:

      let raw = "FOO hello world"
      
      raw.split(" ")
          .filter((part, index) => index !== 0)
          .join(" ")
      

      基本上,取单词,用空格(或其他)分隔,然后过滤掉第一个单词,然后将其重新连接起来。

      我发现这比上面的切片更直观。

      【讨论】:

        【解决方案6】:

        另一种选择是:

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

        我认为它看起来并不比您的原始代码更具语义

        【讨论】:

        • 感谢您在这里提供帮助。我还看到 .split() 接受 2 个参数。不幸的是,在你上面的例子中,它只会返回[FOO, hello]world 被砍掉 :(
        猜你喜欢
        • 2012-08-25
        • 1970-01-01
        • 2019-08-27
        • 1970-01-01
        • 2021-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多