【问题标题】:Javascript Equivalent to PHP Explode()Javascript 等价于 PHP Explode()
【发布时间】:2011-05-29 16:44:15
【问题描述】:

我有这个字符串:

0000000020C90037:TEMP:数据

我需要这个字符串:

TEMP:数据。

使用 PHP 我会这样做:

$str = '0000000020C90037:TEMP:data';
$arr = explode(':', $str);
$var = $arr[1].':'.$arr[2];

我如何在 JavaScript 中有效地explode 一个字符串,就像它在 PHP 中的工作方式一样?

【问题讨论】:

    标签: javascript php string


    【解决方案1】:

    看起来你想要split

    【讨论】:

      【解决方案2】:

      使用 String.split

      "0000000020C90037:TEMP:data".split(':')

      【讨论】:

        【解决方案3】:

        你不需要分裂。你可以使用indexOfsubstr

        str = str.substr(str.indexOf(':')+1);
        

        但与explode 等价的将是split

        【讨论】:

        • 可能有人认为你在刻薄。有时你必须解释一切。例如,“你的问题最好通过 'indexOf' 来解决......但是 'split' 从字面上回答你的问题。”
        • Downvoter:“您如何提供更简单、性能更高的解决方案,而不是验证我的先入之见?”
        【解决方案4】:

        试试这个:

        arr = str.split (":");
        

        【讨论】:

          【解决方案5】:

          如果你喜欢php,看看php.JS - JavaScript explode

          或者在普通的 JavaScript 功能中: `

          var vInputString = "0000000020C90037:TEMP:data";
          var vArray = vInputString.split(":");
          var vRes = vArray[1] + ":" + vArray[2]; `
          

          【讨论】:

          • 我想看看她,但我面前只有乱七八糟的 JavaScript。嗯,emptyArray = { 0: '' }? :-/
          • 我并没有说它是最好的解决方案,但是如果您是 JavScript 新手并且熟悉 php,它是一个很好的解决方案。但是我写另一个例子是有原因的。 :) “保持简单愚蠢!”;)
          • 这听起来很合理,但我认为人们不应该将一种编程语言转换为另一种编程语言;这可能会误导新手,他们可能认为 JavaScript 中的 OOP 就像 C++ 中的 OOP。此外,有人可能只是简单地复制粘贴了链接函数,并认为必须以这种方式定义数组。
          • 是的,完全同意!但这并没有真正将代码交到他手中。就是这样。如果他懂 php,那么他可能会错过 php 中的一些小东西。这是最好的逻辑我指的是逻辑,而不是复制粉彩解决方案,从来没有一个好的解决方案!我的经验是,当你意识到有很多东西要学的时候,你就走在了正确的轨道上。
          • +1 据我所知,这是唯一与 PHP 功能相同的解决方案。如果找不到分隔符,则结果是原始字符串 explode('foo','bar'); // 'bar' 这就是我来到这里的原因,出于我的目的,我打算使用限制的复制和粘贴脚本绝对是完美的。我不必被边缘化来创建自己的。毕竟为什么要重新发明轮子,k.i.s.s.
          【解决方案6】:

          这是您的 PHP 代码的直接转换:

          //Loading the variable
          var mystr = '0000000020C90037:TEMP:data';
          
          //Splitting it with : as the separator
          var myarr = mystr.split(":");
          
          //Then read the values from the array where 0 is the first
          //Since we skipped the first element in the array, we start at 1
          var myvar = myarr[1] + ":" + myarr[2];
          
          // Show the resulting value
          console.log(myvar);
          // 'TEMP:data'
          

          【讨论】:

          • 需要注意的是数组从[0]开始
          • @Herr Kaleun...可以理解...但是 OP 想要数组中的最后两项。
          • +1:没错;这是来自 MDN 的链接:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…。和“相反”的方向,所以 PHP implode() 等价物是 myArray.join(':'): developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
          • 注意split(delimiter,limit) 的限制参数与explode($delimiter,$string,$limit) 的限制参数不同。示例:explode('.','1.2.3.4',3) === array('1','2','3.4') - 在 Javascript 中,您将获得:'1.2.3.4'.split('.',3) === ['1', '2', '3']。有人知道如何轻松复制 PHP 的方法吗?
          • 我已经添加了一个代码 cmets 来清理 array[0] 的东西,可能会让新手感到困惑......
          【解决方案7】:

          创建一个对象:

          // create a data object to store the information below.
              var data   = new Object();
          // this could be a suffix of a url string. 
              var string = "?id=5&first=John&last=Doe";
          // this will now loop through the string and pull out key value pairs seperated 
          // by the & character as a combined string, in addition it passes up the ? mark
              var pairs = string.substring(string.indexOf('?')+1).split('&');
              for(var key in pairs)
              {
                  var value = pairs[key].split("=");
                  data[value[0]] = value[1];
              }
          
          // creates this object 
              var data = {"id":"5", "first":"John", "last":"Doe"};
          
          // you can then access the data like this
              data.id    = "5";
              data.first = "John";
              data.last  = "Doe";
          

          【讨论】:

          • 似乎有点矫枉过正,请您回复
          【解决方案8】:

          无意批评John Hartsock,以防使用给定代码的任何人的分隔符数量可能会有所不同,我会正式建议改用它...

          var mystr = '0000000020C90037:TEMP:data';
          var myarr = mystr.split(":");
          var arrlen = myarr.length;
          var myvar = myarr[arrlen-2] + ":" + myarr[arrlen-1];
          

          【讨论】:

            【解决方案9】:
            String.prototype.explode = function (separator, limit)
            {
                const array = this.split(separator);
                if (limit !== undefined && array.length >= limit)
                {
                    array.push(array.splice(limit - 1).join(separator));
                }
                return array;
            };
            

            应该完全模仿 PHP 的 explode() 函数。

            'a'.explode('.', 2); // ['a']
            'a.b'.explode('.', 2); // ['a', 'b']
            'a.b.c'.explode('.', 2); // ['a', 'b.c']
            

            【讨论】:

            • 感谢作为 ONLY 的人,据我所知,它提供了一个 ACTUAL 等效于 PHP 的爆炸功能(根据原始问题)。
            • 多么简单而优雅的解决方案,我希望这是被接受的回应。
            【解决方案10】:

            console.log(('0000000020C90037:TEMP:data').split(":").slice(1).join(':'))

            输出:TEMP:data

            • .split() 将字符串分解成多个部分
            • .join() 将数组重新组合回字符串
            • 如果您希望数组没有第一项,请使用 .slice(1)

            【讨论】:

            • 这个答案应该有 554 个赞,而不是接受的答案。此外,在过去 3 年中,接受的答案是完全错误,当 OP 要求 1 和 2 时,将索引 0 和 1 连接起来。
            【解决方案11】:

            所以我知道这篇文章已经很老了,但我想我不妨添加一个多年来一直帮助我的功能。为什么不使用上面提到的 split 重新制作爆炸功能?好吧,就是这样:

            function explode(str,begin,end)
            {
               t=str.split(begin);
               t=t[1].split(end);
               return t[0];
            }
            

            如果您尝试获取两个值之间的值,此函数效果很好。例如:

            data='[value]insertdataherethatyouwanttoget[/value]';
            

            如果您有兴趣从两个 [values]“标签”之间获取信息,可以使用如下函数。

            out=explode(data,'[value]','[/value]');
            //Variable out would display the string: insertdataherethatyouwanttoget
            

            但是假设您没有像上面显示的示例那样方便的“标签”。没关系。

            out=explode(data,'insert','wanttoget');
            //Now out would display the string: dataherethatyou
            

            想看到它的实际效果吗?点击here

            【讨论】:

              【解决方案12】:
              var str = '0000000020C90037:TEMP:data';    // str = "0000000020C90037:TEMP:data"
              str = str.replace(/^[^:]+:/, "");          // str = "TEMP:data"
              

              【讨论】:

              • 非常机智的回答。我想知道它与传统拆分相比表现如何。
              【解决方案13】:

              psycho brm的回答做了一点补充(他的版本在 IE

              function explode (s, separator, limit)
              {
                  var arr = s.split(separator);
                  if (limit) {
                      arr.push(arr.splice(limit-1, (arr.length-(limit-1))).join(separator));
                  }
                  return arr;
              }
              

              【讨论】:

                【解决方案14】:

                如果你想定义自己的函数,试试这个:

                function explode (delimiter, string, limit) {
                  if (arguments.length < 2 ||
                    typeof delimiter === 'undefined' ||
                    typeof string === 'undefined') {
                    return null
                  }
                  if (delimiter === '' ||
                    delimiter === false ||
                    delimiter === null) {
                    return false
                  }
                  if (typeof delimiter === 'function' ||
                    typeof delimiter === 'object' ||
                    typeof string === 'function' ||
                    typeof string === 'object') {
                    return {
                      0: ''
                    }
                  }
                  if (delimiter === true) {
                    delimiter = '1'
                  }
                
                  // Here we go...
                  delimiter += ''
                  string += ''
                
                  var s = string.split(delimiter)
                
                  if (typeof limit === 'undefined') return s
                
                  // Support for limit
                  if (limit === 0) limit = 1
                
                  // Positive limit
                  if (limit > 0) {
                    if (limit >= s.length) {
                      return s
                    }
                    return s
                      .slice(0, limit - 1)
                      .concat([s.slice(limit - 1)
                        .join(delimiter)
                      ])
                  }
                
                  // Negative limit
                  if (-limit >= s.length) {
                    return []
                  }
                
                  s.splice(s.length + limit)
                  return s
                }
                

                取自:http://locutus.io/php/strings/explode/

                【讨论】:

                  【解决方案15】:
                  var str = "helloword~this~is~me";
                  var exploded = str.splice(~);
                  

                  exploded 变量将返回数组,您可以访问数组的元素,访问它是 true exploded[nth] 其中 nth 是您想要获取的值的索引

                  【讨论】:

                  • 这甚至行不通! splice 接受 2 个数字和字符串作为参数,而不是 ~(这会导致语法错误)。而splice 不是为了这个目的,它是从数组中获取/取出项目或添加到数组中。
                  【解决方案16】:

                  试试这样,

                  ans = str.split (":");
                  

                  您可以使用字符串的两个部分,例如,

                  ans[0] 和 ans[1]

                  【讨论】:

                  • 也许可以解释这与 8 年前发布的公认答案有何不同。
                  【解决方案17】:

                  我使用了切片、拆分和连接 写一行代码就可以了

                        let arrys = (str.split(":").slice(1)).join(":");
                  

                  【讨论】:

                    猜你喜欢
                    • 2011-07-23
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-09-29
                    • 2015-02-10
                    • 2020-07-27
                    • 2011-11-10
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多