相当于PHP Explode()的Javascript


353

我有这个字符串:

0000000020C90037:TEMP:数据

我需要这个字符串:

TEMP:数据。

使用PHP,我可以这样做:

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

如何explode像在PHP中一样有效地在JavaScript中使用字符串?

Answers:


607

这是您的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'

75
应该注意的是,阵列始于[0]
Herr

52
@Herr Kaleun ...这是可以理解的...但是OP想要数组中的最后两项。
约翰·哈索克

4
+1:没错;这是MDN的链接:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…。和“相反”的方向,所以PHP破灭()当量为myArray.join( ':'):developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...
Sk8erPeter

12
注意split(delimiter,limit)的limit参数与explode($delimiter,$string,$limit)的limit参数不同。示例:explode('.','1.2.3.4',3) === array('1','2','3.4')-使用Javascript时,您将获得:'1.2.3.4'.split('.',3) === ['1', '2', '3']。任何人都知道如何轻松地复制PHP的方法吗?
内森JB

1
我添加了代码注释以清除array [0]内容,可能会使新手感到困惑...
NDM

46

您无需拆分。您可以使用indexOfsubstr

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

但是,相当于explodesplit


5
可能有人以为你很狡猾。有时您必须解释一切。例如,“您的问题最好通过'indexOf'解决,但是'拆分'会从字面上回答您的问题。”
乔尔·梅隆

Downvoter:“ 您敢于提供一个更简单,更高效的解决方案,而不是验证我的先入之见吗?”
jchook

37
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']

7
据我所知,它是唯一能够提供与PHP爆炸功能等效的ACTUAL(根据原始问题)的荣誉。
faazshift 2014年

1
我希望这是一个简单而优雅的解决方案,得到大家的认可。
soger



6

创建一个对象:

// 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";

7
似乎有点矫枉过正,TY为寿响应
道格·莫利纳


4

如果您喜欢php,请查看php.JS-JavaScript爆炸

或使用普通的JavaScript功能:

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

我想看看她,但眼前只有凌乱的JavaScript。嗯emptyArray = { 0: '' }?:-/
Marcel Korpel 2010年

我没有说这是最好的解决方案,但是如果您是JavScript的新手并且熟悉php,那么它是一个很好的解决方案。但是我写另一个例子是有原因的。:)“保持简单愚蠢!”;)
eriksv88 2010年

这听起来很合理,但是我认为不应该将一种编程语言转换为另一种编程语言。这可能会误导新手,他们可能认为JavaScript中的OOP就像C ++中的OOP。而且,某些人可能只是复制粘贴了链接的函数,并认为必须以这种方式定义数组。
马塞尔·科佩尔

是的,完全同意!但这并不是将代码真正掌握在手中。就是这样。如果他知道php,那么也许他会错过php中的小知识。最好的逻辑是我指的是逻辑,而不是作为复制粉彩解决方案,从来没有一个好的解决方案!我的经验是,意识到这一天需要学习很多东西,那就是当您走上正确的道路时。
eriksv88 2010年

+1据我所知,这是唯一功能与PHP相同的解决方案。如果找不到分隔符,则结果是原始字符串。explode('foo','bar'); // 'bar'这就是我到达此处的原因,出于我的目的,我打算使用带有限制的复制和粘贴脚本绝对完美。我不必为创建自己的游戏而烦恼。为什么还要重新发明轮子,亲亲
Andy Gee

4

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

输出: TEMP:data

  • .split()会将字符串分解为多个部分
  • .join()将数组重新组合回字符串
  • 当您想要没有它的第一项的数组时,请使用.slice(1)

该答案应具有554赞,而不是被接受的答案。此外,在过去3年里接受的答案一直是完全错误的,串联指数在0和1时,OP要求1和2
NobleUplift

2

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

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


1

只是psycho brm的答案的一点补充(他的版本在IE <= 8中不起作用)。此代码是跨浏览器兼容的:

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;
}

0

所以我知道这篇文章已经很老了,但是我认为我还可以添加多年来对我有帮助的功能。为什么不使用如上所述的split重新制作爆炸功能?好吧,这是:

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

如果您要获取两个值之间的值,则此功能效果很好。例如:

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

如果您有兴趣从两个“值”“标签”之间获取信息,则可以使用如下功能。

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

但是,可以说您没有上面显示的示例那样的方便的“标签”。不管。

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

想要看到它在行动吗?请点击这里


0
var str = "helloword~this~is~me";
var exploded = str.splice(~);

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


2
这甚至行不通!splice接受2位数字和字符串作为参数,而不是a ~(这会导致语法错误)。而拼接不是为了这个目的,它是获取/从取出的物品或添加到一个数组。
CPHPython

0

这样尝试

ans = str.split (":");

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

ans [0]和ans [1]


2
也许解释一下这与8年前发布的答案有何不同。
莱斯


0

如果要定义自己的函数,请尝试以下操作:

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/


-1

Felix Kling的代码是动态的(不同于公认的答案),但是最初的示例字符串是一个糟糕的起点。因此,为那些想要质量速度的人以视觉方式展示他的答案(他只是在回答问题):

    var s = '1:2:3:4:5:6';
    console.log(s);
    s = s.substr(s.indexOf(':')+1);
    console.log(s);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.