첫 번째 공백 발생으로 문자열을 나누는 최적화 된 정규 표현식을 얻지 못했습니다.
var str="72 tocirah sneab";
나는 얻을 필요가있다 :
[
"72",
"tocirah sneab",
]
답변
공백 문자 (탭이나 다른 공백 문자는 아님) 만 고려하고 첫 번째 공백 앞의 모든 문자와 첫 번째 공백 뒤의 모든 문자 만 신경 쓰는 경우 다음과 같이 정규 표현식없이 수행 할 수 있습니다.
str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"
공백이 없으면 첫 번째 줄은 빈 문자열을 반환하고 두 번째 줄은 전체 문자열을 반환합니다. 해당 상황에서 원하는 동작인지 또는 해당 상황이 발생하지 않는지 확인하십시오.
답변
자바 스크립트는 lookbehinds를 지원하지 않으므로 split
불가능합니다. match
공장:
str.match(/^(\S+)\s(.*)/).slice(1)
또 다른 트릭 :
str.replace(/\s+/, '\x01').split('\x01')
어때요?
[str.replace(/\s.*/, ''), str.replace(/\S+\s/, '')]
왜 안돼?
reverse = function (s) { return s.split('').reverse().join('') }
reverse(str).split(/\s(?=\S+$)/).reverse().map(reverse)
아니면
re = /^\S+\s|.*/g;
[].concat.call(re.exec(str), re.exec(str))
2019 업데이트 : ES2018부터 lookbehinds가 지원됩니다.
str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)
답변
ES6에서는 다음을 수행 할 수도 있습니다.
let [first, ...second] = str.split(" ")
second = second.join(" ")
답변
게임을 늦게 알고는 있지만이 작업을 수행하는 매우 간단한 방법이 있습니다.
const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);
이 떠나 arr[0]
와 "72"
와 arr[1]
함께 "tocirah sneab"
. arr [2]는 비어 있지만 무시해도됩니다.
참고로 :
답변
var arr = []; //new storage
str = str.split(' '); //split by spaces
arr.push(str.shift()); //add the number
arr.push(str.join(' ')); //and the rest of the string
//arr is now:
["72","tocirah sneab"];
그래도 여전히 더 빠른 방법이 있다고 생각합니다.
답변
georg의 솔루션은 훌륭하지만 문자열에 공백이 없으면 중단됩니다. 문자열에 공백이없는 경우 .split 및 캡처 그룹을 사용하는 것이 더 안전합니다.
str_1 = str.split(/\s(.+)/)[0]; //everything before the first space
str_2 = str.split(/\s(.+)/)[1]; //everything after the first space