문자열을 분리하여 특정 문자를 어떻 게 분리합니까?


533

나는이 끈이있다

'john smith~123 Street~Apt 4~New York~NY~12345'

JavaScript를 사용하여 이것을 파싱하는 가장 빠른 방법은 무엇입니까?

var name = "john smith";
var street= "123 Street";
//etc...

답변:


846

JavaScript String.prototype.split기능으로 :

var input = 'john smith~123 Street~Apt 4~New York~NY~12345';

var fields = input.split('~');

var name = fields[0];
var street = fields[1];
// etc.

51

jQuery가 필요하지 않습니다.

var s = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = s.split(/~/);
var name = fields[0];
var street = fields[1];

53
이 간단한 대체에 정규식을 추가 할 필요가 없습니다. 그것은 무엇이든 느리게 할 것입니다. 간단한 문자열 바꾸기를 위해 따옴표로 변경할 수 있습니다.
Anish Gupta

47

ECMAScript6에 따르면 ES6깔끔한 방법은 배열을 파괴하는 것입니다.

const input = 'john smith~123 Street~Apt 4~New York~NY~12345';

const [name, street, unit, city, state, zip] = input.split('~');

console.log(name); // john smith
console.log(street); // 123 Street
console.log(unit); // Apt 4
console.log(city); // New York
console.log(state); // NY
console.log(zip); // 12345

입력 문자열에 추가 항목이있을 수 있습니다. 이 경우 rest 연산자를 사용하여 나머지 배열을 얻거나 무시할 수 있습니다.

const input = 'john smith~123 Street~Apt 4~New York~NY~12345';

const [name, street, ...others] = input.split('~');

console.log(name); // john smith
console.log(street); // 123 Street
console.log(others); // ["Apt 4", "New York", "NY", "12345"]

값에 대한 읽기 전용 참조를 가정하고 const선언을 사용했습니다 .

ES6을 즐기십시오!


6
항목을 건너 뛸 수도 있습니다.const [name, , unit, ...others] = ...
Sallar

16

이것이 가장 간단한 방법은 아니지만 이렇게 할 수 있습니다.

var addressString = "~john smith~123 Street~Apt 4~New York~NY~12345~",
    keys = "name address1 address2 city state zipcode".split(" "),
    address = {};

// clean up the string with the first replace
// "abuse" the second replace to map the keys to the matches
addressString.replace(/^~|~$/g).replace(/[^~]+/g, function(match){
    address[ keys.unshift() ] = match;
});

// address will contain the mapped result
address = {
    address1: "123 Street"
    address2: "Apt 4"
    city: "New York"
    name: "john smith"
    state: "NY"
    zipcode: "12345"
}

구조 해제를 사용하여 ES2015 업데이트

const [address1, address2, city, name, state, zipcode] = addressString.match(/[^~]+/g);

// The variables defined above now contain the appropriate information:

console.log(address1, address2, city, name, state, zipcode);
// -> john smith 123 Street Apt 4 New York NY 12345

4
먼저 '~'기호로 구분 된 문자열과의 배열이 keys있습니다. 두 번째 replace 함수는 [^~]+서로 다른 각 부분 (예 : '123 Street', 'Apt 4'등)을 일치시키는 데 사용하고 각 부분에 대한 함수를 호출하여 인수로 전달합니다. 각 실행에서이 함수는 키 배열에서 첫 번째 키를 가져오고 (Array.unshift를 사용하여 제거) 키와 부분을 주소 개체에 할당합니다.
ewino

13

실제로 jQuery에 적합한 작업이 아니기 때문에 JavaScript의 substr 또는 split 을 살펴보고 싶을 것 입니다.


5

가장 쉬운 방법은 다음과 같습니다.

var address = theEncodedString.split(/~/)
var name = address[0], street = address[1]

5

경우 Spliter은 발견

나눠

그렇지 않으면 같은 문자열을 반환

function SplitTheString(ResultStr) {
    if (ResultStr != null) {
        var SplitChars = '~';
        if (ResultStr.indexOf(SplitChars) >= 0) {
            var DtlStr = ResultStr.split(SplitChars);
            var name  = DtlStr[0];
            var street = DtlStr[1];
        }
    }
}

4

다음과 같은 것 :

var divided = str.split("/~/");
var name=divided[0];
var street = divided[1];

아마도 가장 쉬울 것입니다


2
아니, 당신도 원하는 split("~")또는 split(/~/)아니지만 split("/~/"). 후자는 쪼개지 "John/~/Smith"않을 "John~Smith"것이다.
Andrew Willems

4

split텍스트를 분할하는 데 사용할 수 있습니다 .

대안 match으로 다음과 같이 사용할 수도 있습니다.

var str = 'john smith~123 Street~Apt 4~New York~NY~12345';
matches = str.match(/[^~]+/g);

console.log(matches);
document.write(matches);

정규 표현식 [^~]+은 제외 ~하고 모든 문자를 일치시키고 배열에서 일치를 반환합니다. 그런 다음 일치 항목을 추출 할 수 있습니다.


1
이것은 나를 위해 일했다! str.split();Firefox에서는 작동하지 않지만 Chrome 및 Firefox에서 모두 작동했습니다.
Sandeep


2

Zach는이 방법을 사용했습니다. 그의 방법을 사용하여 겉보기에 "다차원"배열을 만들 수도 있습니다. JSFiddle http://jsfiddle.net/LcnvJ/2/ 에서 간단한 예를 만들었습니다.

// array[0][0] will produce brian
// array[0][1] will produce james

// array[1][0] will produce kevin
// array[1][1] will produce haley

var array = [];
    array[0] = "brian,james,doug".split(",");
    array[1] = "kevin,haley,steph".split(",");

2

JavaScript : 문자열을 배열 JavaScript 분할로 변환

    var str = "This-javascript-tutorial-string-split-method-examples-tutsmake."
 
    var result = str.split('-'); 
     
    console.log(result);
     
    document.getElementById("show").innerHTML = result; 
<html>
<head>
<title>How do you split a string, breaking at a particular character in javascript?</title>
</head>
<body>
 
<p id="show"></p> 
 
</body>
</html>

https://www.tutsmake.com/javascript-convert-string-to-array-javascript/


1

이것 string.split("~")[0];으로 작업이 완료됩니다.

출처 : String.prototype.split ()


카레와 기능 구성을 사용한 또 다른 기능적 접근.

첫 번째는 split 함수입니다. 이것을 이것 "john smith~123 Street~Apt 4~New York~NY~12345"으로 만들고 싶습니다["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]

const split = (separator) => (text) => text.split(separator);
const splitByTilde = split('~');

이제 특수 splitByTilde기능을 사용할 수 있습니다 . 예:

splitByTilde("john smith~123 Street~Apt 4~New York~NY~12345") // ["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]

첫 번째 요소를 얻으려면 list[0]연산자를 사용할 수 있습니다 . first함수를 만들어 봅시다 :

const first = (list) => list[0];

알고리즘은 다음과 같습니다. 콜론으로 나눈 다음 주어진 목록의 첫 번째 요소를 가져옵니다. 따라서 최종 getName함수 를 작성하기 위해 해당 함수를 구성 할 수 있습니다 . 로 compose함수 만들기 reduce:

const compose = (...fns) => (value) => fns.reduceRight((acc, fn) => fn(acc), value);

그리고 이제 그것을 사용하여 구성 splitByTilde하고 first기능합니다.

const getName = compose(first, splitByTilde);

let string = 'john smith~123 Street~Apt 4~New York~NY~12345';
getName(string); // "john smith"

1

일반 자바 스크립트로 사용해보기

 //basic url=http://localhost:58227/ExternalApproval.html?Status=1

 var ar= [url,statu] = window.location.href.split("=");

0

쉼표로 나눈 질문이이 질문에 복제되었으므로 여기에 추가하십시오.

문자를 분할하고 쉼표로 자주 발생하는 해당 문자 뒤에 오는 추가 공백을 처리하려면 replace다음 split과 같이 사용할 수 있습니다 .

var items = string.replace(/,\s+/, ",").split(',')

-1

이 코드를 사용하십시오-

function myFunction() {
var str = "How are you doing today?";
var res = str.split("/");

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.