[javascript] 첫 번째 공백 발생시 분할 문자열

첫 번째 공백 발생으로 문자열을 나누는 최적화 된 정규 표현식을 얻지 못했습니다.

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]는 비어 있지만 무시해도됩니다.

참고로 :

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split#Capturing_parentheses


답변

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


답변

.replace를 사용하여 첫 번째 항목 만 교체 할 수 있습니다.

str = str.replace(' ','<br />');

/ g를 그대로 둡니다.

데모