첫 번째 공백 발생으로 문자열을 나누는 최적화 된 정규 표현식을 얻지 못했습니다.
var str="72 tocirah sneab";
나는 얻을 필요가있다 :
[
"72",
"tocirah sneab",
]
첫 번째 공백 발생으로 문자열을 나누는 최적화 된 정규 표현식을 얻지 못했습니다.
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)
str.match(/^(\S+)\s(.*)/).slice(1)
공간이없는 줄에서는 작동하지 않습니다
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]는 비어 있지만 무시해도됩니다.
참고로 :
끈을 배열로 나누고 필요한 부분을 붙이십시오. 이 접근 방식은 매우 유연하며 많은 상황에서 작동하며 추론하기 쉽습니다. 또한 하나의 함수 호출 만 필요합니다.
arr = str.split(' '); // ["72", "tocirah", "sneab"]
strA = arr[0]; // "72"
strB = arr[1] + ' ' + arr[2]; // "tocirah sneab"
또는 문자열에서 직접 필요한 것을 체리 피킹하려면 다음과 같이 할 수 있습니다.
strA = str.split(' ')[0]; // "72";
strB = str.slice(strA.length + 1); // "tocirah sneab"
또는 이렇게 :
strA = str.split(' ')[0]; // "72";
strB = str.split(' ').splice(1).join(' '); // "tocirah sneab"
그러나 첫 번째 예를 제안합니다.
클래스 목록이나 클래스 이름 또는 ID의 일부에서 클래스를 가져와야 할 때마다 항상 split ()을 사용하고 배열 인덱스를 사용하여 클래스를 얻거나 대부분의 경우 pop () 첫 번째 요소를 얻는 마지막 요소 또는 shift ()
이 예는 div의 클래스 "gallery_148 ui-sortable"을 가져와 갤러리 ID 148을 반환합니다.
var galleryClass = $(this).parent().prop("class"); // = gallery_148 ui-sortable
var galleryID = galleryClass.split(" ").shift(); // = gallery_148
galleryID = galleryID.split("_").pop(); // = 148
//or
galleryID = galleryID.substring(8); // = 148 also, but less versatile
더 적은 줄로 압축 할 수 있다고 확신하지만 읽기 쉽게 확장했습니다.
약간 다른 결과가 필요했습니다.
나는 첫 단어를 원했고, 아무 것도 비워도 그 뒤를이었다.
str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' '));
str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1);
입력이 경우 그래서 oneword
당신이 얻을 oneword
및''
.
입력이 one word and some more
있으면 one
및 을 얻습니다 word and some more
.
다음 함수는 문장을 항상 두 요소로 나눕니다. 첫 번째 요소는 첫 번째 단어 만 포함하고 두 번째 요소는 다른 모든 단어를 포함합니다 (또는 빈 문자열 임).
var arr1 = split_on_first_word("72 tocirah sneab"); // Result: ["72", "tocirah sneab"]
var arr2 = split_on_first_word(" 72 tocirah sneab "); // Result: ["72", "tocirah sneab"]
var arr3 = split_on_first_word("72"); // Result: ["72", ""]
var arr4 = split_on_first_word(""); // Result: ["", ""]
function split_on_first_word(str)
{
str = str.trim(); // Clean string by removing beginning and ending spaces.
var arr = [];
var pos = str.indexOf(' '); // Find position of first space
if ( pos === -1 ) {
// No space found
arr.push(str); // First word (or empty)
arr.push(''); // Empty (no next words)
} else {
// Split on first space
arr.push(str.substr(0,pos)); // First word
arr.push(str.substr(pos+1).trim()); // Next words
}
return arr;
}