PHP Explode ()와 동등한 자바 스크립트


353

이 문자열이 있습니다.

0000000020C90037 : TEMP : 데이터

이 문자열이 필요합니다.

TEMP : 데이터.

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는 배열의 마지막 두 항목을 원했습니다.
John Hartsock

4
+1 : 맞습니다. 다음은 MDN의 developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… 링크 입니다 . 그리고 "반대"방향이므로 PHP implode ()는 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

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의 폭발 기능에 해당합니다.
faazshift

1
간단하고 우아한 해결책 인 나는 이것이 받아 들여진 응답이기를 바란다.
soger



6

create는 객체입니다.

// 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
칸토 응답에 대한 약간의 과잉, 타이 보인다
더그 몰리뉴


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 2016

나는 그것이 최고의 솔루션이라고 말하지는 않았지만 JavScript를 처음 사용하고 PHP에 익숙하다면 좋은 솔루션입니다. 그러나 내가 또 다른 예를 쓴 이유가있었습니다. :) "간단하게 멍청하게 유지하십시오!";)
eriksv88

그것은 합리적으로 들리지만 한 프로그래밍 언어를 다른 프로그래밍 언어로 바꾸고 싶지는 않다고 생각합니다. JavaScript의 OOP가 C ++의 OOP와 같다고 생각하는 초보자에게는 오해의 소지가 있습니다. 또한 누군가가 단순히 연결된 함수를 복사하여 붙여 넣은 다음 배열을 그런 식으로 정의해야한다고 생각할 수 있습니다.
Marcel Korpel

예, 완전히 동의합니다! 그러나 실제로 코드를 손에 넣지는 않습니다. 그리고 그게 다야. 그가 PHP를 알고 있다면, PHP에서 약간의 것을 놓칠 수 있습니다. 내가 복사 파스텔 솔루션이 아니라 논리를 참조하는 것이 가장 좋은 논리입니다. 좋은 해결책은 없습니다! 내 경험에 따르면, 하루는 배울 것이 많다는 것을 깨닫고 올바른 시점에 있습니다.
eriksv88

+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 년 동안 허용 대답했습니다 완전히 잘못 영업 이익은 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

1

psycho brm 의 답변에 약간의 추가 (IE의 버전은 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 exploded [nth] 여기서 nth는 얻고 자하는 값의 인덱스입니다.


2
이것은 심지어 작동하지 않습니다! splice는 2 자리 숫자와 문자열을 매개 변수로 사용하지만 매개 변수로 사용할 수 없습니다 ~(구문 오류가 발생 함). 그리고 스플 라이스 는 이러한 목적을위한 것이 아니며, 배열에서 항목을 가져 오거나 추가하는 것입니다.
CPHPython

0

이렇게 해봐

ans = str.split (":");

문자열의 두 부분을 사용할 수 있습니다.

ans [0] 및 ans [1]


2
아마도 이것이 8 년 전에 게시 된 승인 된 답변과 어떻게 다른지 설명하십시오.
Lece

0

슬라이스, 분할 및 조인을 사용했습니다. 한 줄의 코드 만 작성할 수 있습니다.

      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.