PHP Explode()と同等のJavaScript


353

私はこの文字列を持っています:

0000000020C90037:TEMP:データ

この文字列が必要です:

TEMP:data。

PHPで私はこれを行います:

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

explodePHPで動作するようにJavaScriptで文字列を効果的にするにはどうすればよいですか?

回答:


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は配列の最後の2つの項目を必要としていました。
John Hartsock、2011年

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)の制限パラメータは、の制限パラメータと同じようには機能しません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のメソッドを複製する方法を知っていますか?
Nathan JB

1
配列[0]を整理するためにコードコメントを追加しました。初心者を混乱させる可能性があります...
NDM

46

分割する必要はありません。あなたは使用することができますindexOfsubstr

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

しかし、同等にはexplodeなりますsplit


5
誰かがおそらくあなたが卑劣だと思っていました。時には、すべてを説明する必要があります。例:「問題は 'indexOf'によって最もよく解決されますが、 'split'は文字通り質問に答えます。」
Joel Mellon

ダウンボーター:「自分の先入観を検証するのではなく、よりシンプルでよりパフォーマンスの高いソリューションを提供することを、あえてしませんか?」
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
であることのために賞賛ONLY一つは、私の知る限り、提供してACTUAL(元の質問ごとに)PHPの爆発の機能に相当します。
faazshift 2014年

1
何とシンプルでエレガントな解決策でしょうか。これが受け入れられた回答であるといいのですが。
2016



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
Doug Molineux


4

phpが好きなら、php.JS-JavaScript explodeを見てください。

または通常の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

それは理にかなっているように見えますが、あるプログラミング言語を別のプログラミング言語に変換したくないと思います。これは、JavaScriptでのOOPがC ++でのOOPに似ていると考える初心者に誤解を与える可能性があります。さらに、誰かが単にリンクされた関数をコピーして貼り付け、そのように配列を定義する必要があると考えるかもしれません。
Marcel Korpel、2010

はい、完全に同意します。しかし、それは実際にコードを手に入れることではありません。以上です。もし彼が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年間の受け入れ答えがされている完全に間違っ OPは1と2について尋ねられたとき、インデックス0と1を連結
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
var str = '0000000020C90037:TEMP:data';    // str = "0000000020C90037:TEMP:data"
str = str.replace(/^[^:]+:/, "");          // str = "TEMP:data"

非常に機知に富んだ答え。従来のスプリットと比較して、パフォーマンスが良いのではないでしょうか。
NobleUplift 2018年

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を使用してexplode関数を再作成しないのはなぜですか?さてここにあります:

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

この関数は、2つの値の間の値を取得する場合に役立ちます。例えば:

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

2つの[値]「タグ」の間から情報を取得することに興味がある場合は、次のような関数を使用できます。

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(~);

展開された変数は配列を返し、配列の要素にアクセスして、それにアクセスできますtrue expanded [nth]ここで、nthは取得する値のインデックスです


2
これも機能しません!spliceは、2桁と文字列をパラメータとして受け入れ~ます。これは、構文エラーになります。そして、スプライスはこの目的のためではなく、配列から項目を取得/取得したり、配列に追加したりするためのものです。
CPHPython 2018

0

このようにしてみてください

ans = str.split (":");

文字列の2つの部分を使用できます。

ans [0]およびans [1]


2
おそらく、これが8年前に投稿された承認済みの回答とどのように異なるのか説明してください。
Lece

0

私はスライス、スプリット、ジョインを使用しました1行のコードを書くことができます

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.