어떻게 한 번만 즉, 메이크업의 문자열을 분할 할 수 있습니다 1|Ceci n'est pas une pipe: | Oui
에 구문 분석을 : ["1", "Ceci n'est pas une pipe: | Oui"]
?
분할의 한계가 도움이되지 않는 것 같습니다 ...
어떻게 한 번만 즉, 메이크업의 문자열을 분할 할 수 있습니다 1|Ceci n'est pas une pipe: | Oui
에 구문 분석을 : ["1", "Ceci n'est pas une pipe: | Oui"]
?
분할의 한계가 도움이되지 않는 것 같습니다 ...
답변:
이것은 예쁜 접근 방식은 아니지만 적절한 효율성으로 작동합니다.
var string = "1|Ceci n'est pas une pipe: | Oui";
var components = string.split('|');
alert([components.shift(), components.join('|')]);
components.splice(0,2).slice(0,2)
String.indexOf('|')
'|'가 처음 나타나는 색인을 가져 오는 데 사용하고 싶을 것 입니다.
var i = s.indexOf('|');
var splits = [s.slice(0,i), s.slice(i+1)];
+1
두 개 이상의 문자 인 경우 실제로 구분자 문자열의 길이 여야합니다.
var i = s.split('|',2).join('|').length;//2nd index
var splits = [s.slice(0,i).split('|'), s.slice(i+1)];
하나의 라이너와 imo, 더 간단 :
var str = 'I | am super | cool | yea!';
str.split('|').slice(1).join('|');
이것은 "am super | cool | yea!"를 반환합니다.
ES6 구문은 다른 접근 방식을 허용합니다.
function splitOnce(s, on) {
[first, ...rest] = s.split(on)
return [first, rest.length > 0? rest.join(on) : null]
}
또한 |
빈 문자열이 아닌 null을 반환 하여 문자열이없는 결과를 처리합니다 .
splitOnce("1|Ceci n'est pas une pipe: | Oui", "|")
>>> ["1", "Ceci n'est pas une pipe: | Oui"]
splitOnce("Celui-ci n'a pas de pipe symbol!", "|")
>>> ["Celui-ci n'a pas de pipe symbol!", null]
파 드 파이프? C'est null!
나는 주로 파이프 기호에 말장난을 할 수 있도록이 답장을 추가했지만, es6 구문을 보여주기 위해-얼마나 많은 사람들이 여전히 그것을 사용하지 않는지 놀랍습니다.
문자열에 구분 기호가 포함되지 않은 경우 @NickCraver의 솔루션은 여전히 두 요소의 배열을 반환하고 두 번째 요소는 빈 문자열입니다. 나는 분할과 일치하는 행동을 선호합니다. 즉, 입력 문자열에 구분 기호가 포함되어 있지 않으면 단일 요소가있는 배열 만 반환됩니다.
var splitOnce = function(str, delim) {
var components = str.split(delim);
var result = [components.shift()];
if(components.length) {
result.push(components.join(delim));
}
return result;
};
splitOnce("a b c d", " "); // ["a", "b c d"]
splitOnce("a", " "); // ["a"]
다른 곳의 상품 외에 다른 짧은 접근 방식은 replace()
의 한계를 활용하는 것입니다.
var str = "1|Ceci n'est pas une pipe: | Oui";
str.replace("|", "aUniquePhraseToSaySplitMe").split("aUniquePhraseToSaySplitMe");
@sreservoir가 주석에서 지적했듯이, 고유 한 문구는 진정으로 고유해야합니다. 그가 말했듯이 인쇄 할 수없는 문자는 사용자 입력 (예 : 브라우저에서 입력)에 대해 이것을 실행하는 경우 가능합니다.
이것은 조금 더 길지만 한계가 다음과 같아야한다고 생각하는 것처럼 작동합니다.
function split_limit(inString, separator, limit){
var ary = inString.split(separator);
var aryOut = ary.slice(0, limit - 1);
if(ary[limit - 1]){
aryOut.push(ary.slice(limit - 1).join(separator));
}
return aryOut;
}
console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 1));
console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 2));
console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 3));
console.log(split_limit("1|Ceci n'est pas une pipe: | Oui","|", 7));
https://jsfiddle.net/2gyxuo2j/
limit of Zero는 재미있는 결과를 반환하지만 효율성이라는 이름으로 확인을 생략했습니다. 필요한 경우 다음을 함수의 첫 번째 줄로 추가 할 수 있습니다.
if(limit < 1) return [];
"파이프 라인"을 사용하고 싶다면, reduce
당신의 친구입니다
const separator = '|'
jsonNode.split(separator)
.reduce((previous, current, index) =>
{
if (index < 2) previous.push(current)
else previous[1] += `${separator}${current}`
return previous
}, [])
.map((item: string) => (item.trim()))
.filter((item: string) => (item != ''))