【问题标题】:Javascript split to split string in 2 parts irrespective of number of spit characters present in stringJavascript拆分为将字符串拆分为两部分,而与字符串中存在的吐出字符数无关
【发布时间】:2012-06-24 11:27:52
【问题描述】:

我想使用 split 函数将 Javascript 中的字符串分成两部分。

例如我有字符串:

str='123&345&678&910'

如果我使用 javascripts 拆分,它会将其拆分为 4 个部分。 但我只需要考虑它遇到的第一个“&”,它就需要分成两部分。

正如我们在 Perl 拆分中所做的那样,如果我使用如下:

($fir, $sec) = split(/&/,str,2)

它将str分成两部分,但javascript只给我:

str.split(/&/, 2);
fir=123
sec=345

我希望秒是:

sec=345&678&910

我如何在 Javascript 中做到这一点。

【问题讨论】:

  • @ajax333221。这是个好问题!提及其他语言语法并不会使其成为一个坏问题或翻译问题。
  • 使用indexOf获取第一个&的索引。然后使用substring 函数提取这两个部分。但是如果你用谷歌搜索“javascript字符串函数”,这是不可能被阻止的。
  • @gdoron 并没有说不是,我只是觉得他可以尝试自己做更多的事情。请记住,SO 是最后的选择之一
  • @ajax333221。你怎么知道他不够努力?水晶球? 谁说 SO 是最后的选择?!

标签: javascript


【解决方案1】:
var subStr = string.substring(string.indexOf('&') + 1);

查看此类似问题以获得其他答案:

split string only on first instance of specified character

【讨论】:

    【解决方案2】:

    您可以使用match 代替split

    str='123&345&678&910';
    splited = str.match(/^([^&]*?)&(.*)$/);
    splited.shift();
    console.log(splited);
    

    输出:

    ["123", "345&678&910"]
    

    【讨论】:

      【解决方案3】:

      您可以使用以下技巧留在split 部分:

      var str='123&345&678&910',
          splitted = str.split( '&' ),
          // shift() removes the first item and returns it
          first = splitted.shift();
      
      console.log( first ); // "123"
      console.log( splitted.join( '&' ) ); // "345&678&910"
      

      【讨论】:

        【解决方案4】:

        我写了这个函数:

        function splitter(mystring, mysplitter) {
            var myreturn = [],
                myindexplusone = mystring.indexOf(mysplitter) + 1;
        
            if (myindexplusone) {
                myreturn[0] = mystring.split(mysplitter, 1)[0];
                myreturn[1] = mystring.substring(myindexplusone);
            }
        
            return myreturn;
        }
        
        var str = splitter("hello-world-this-is-a-test", "-");
        
        console.log(str.join("<br>"));
        //hello
        //world-this-is-a-test​​​
        

        输出将是一个空数组(不匹配)或具有 2 个元素的数组(拆分之前和之后的所有内容)

        Demo

        【讨论】:

          【解决方案5】:

          我有这个:

          var str='123&345&678&910';
          str.split('&',1).concat( str.split('&').slice(1).join('&') );
          //["123", "345&678&910"]
          
          
          
          str.split('&',2).concat( str.split('&').slice(2).join('&') );
          //["123", "345", "678&910"];
          

          为了方便:

          String.prototype.mySplit = function( sep, chunks) {
             chunks = chunks|=0 &&chunks>0?chunks-1:0;
             return this.split( sep, chunks )
                        .concat( 
                            chunks?this.split( sep ).slice( chunks ).join( sep ):[]
                         );
          }
          

          【讨论】:

            【解决方案6】:

            split()replace()的用法呢?:

            鉴于我们有那个字符串 str='123&amp;345&amp;678&amp;910' 我们可以做到

                var first = str.split("&",1); //gets the first word
                var second = str.replace(first[0]+"&", ""); //removes the first word and the ampersand
            

            请注意split() 返回一个数组,这就是推荐使用first[0] 获取索引的原因,但是,如果没有获取索引,它仍然可以根据需要工作,即first+"&amp;"

            请随意将“&”替换为您需要拆分的字符串。

            希望这会有所帮助:)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-22
              相关资源
              最近更新 更多