나는이 끈이있다
'john smith~123 Street~Apt 4~New York~NY~12345'
JavaScript를 사용하여 이것을 파싱하는 가장 빠른 방법은 무엇입니까?
var name = "john smith";
var street= "123 Street";
//etc...
나는이 끈이있다
'john smith~123 Street~Apt 4~New York~NY~12345'
JavaScript를 사용하여 이것을 파싱하는 가장 빠른 방법은 무엇입니까?
var name = "john smith";
var street= "123 Street";
//etc...
답변:
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.
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을 즐기십시오!
const [name, , unit, ...others] = ...
이것이 가장 간단한 방법은 아니지만 이렇게 할 수 있습니다.
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
keys
있습니다. 두 번째 replace 함수는 [^~]+
서로 다른 각 부분 (예 : '123 Street', 'Apt 4'등)을 일치시키는 데 사용하고 각 부분에 대한 함수를 호출하여 인수로 전달합니다. 각 실행에서이 함수는 키 배열에서 첫 번째 키를 가져오고 (Array.unshift를 사용하여 제거) 키와 부분을 주소 개체에 할당합니다.
다음과 같은 것 :
var divided = str.split("/~/");
var name=divided[0];
var street = divided[1];
아마도 가장 쉬울 것입니다
split("~")
또는 split(/~/)
아니지만 split("/~/")
. 후자는 쪼개지 "John/~/Smith"
않을 "John~Smith"
것이다.
split
텍스트를 분할하는 데 사용할 수 있습니다 .
대안 match
으로 다음과 같이 사용할 수도 있습니다.
var str = 'john smith~123 Street~Apt 4~New York~NY~12345';
matches = str.match(/[^~]+/g);
console.log(matches);
document.write(matches);
정규 표현식 [^~]+
은 제외 ~
하고 모든 문자를 일치시키고 배열에서 일치를 반환합니다. 그런 다음 일치 항목을 추출 할 수 있습니다.
str.split();
Firefox에서는 작동하지 않지만 Chrome 및 Firefox에서 모두 작동했습니다.
str.split();
Firefox 및 모든 주요 브라우저에서 작동합니다 .
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(",");
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/
이것 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"
이 코드를 사용하십시오-
function myFunction() {
var str = "How are you doing today?";
var res = str.split("/");
}