Dizeyi ilk beyaz boşluk oluştuğunda böl

Bana ilk beyaz boşluk oluşumuna dayanan bir String'i bölen optimize edilmiş bir regex alamadım:

var str="72 tocirah sneab";

Almam lazım:

[
    "72",
    "tocirah sneab",
]
Çözüm

Yalnızca boşluk karakterini önemsiyorsanız (sekmeleri veya diğer boşluk karakterlerini değil) ve yalnızca ilk boşluktan önceki her şeyi ve ilk boşluktan sonraki her şeyi önemsiyorsanız, bunu aşağıdaki gibi bir düzenli ifade olmadan da yapabilirsiniz:

str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"

Hiç boşluk yoksa, ilk satırın boş bir dize döndüreceğini ve ikinci satırın tüm dizeyi döndüreceğini unutmayın. Bu durumda istediğiniz davranışın bu olduğundan (veya bu durumun ortaya çıkmayacağından) emin olun.

Yorumlar (2)

Javascript lookbehindları desteklemez, bu nedenlesplitmümkün değildir. eşleştir çalışır:

str.match(/^(\S+)\s(.*)/).slice(1)

Başka bir numara:

str.replace(/\s+/, '\x01').split('\x01')

Nasıl olur?

[str.replace(/\s.*/, ''), str.replace(/\S+\s/, '')]

ve neden olmasın

reverse = function (s) { return s.split('').reverse().join('') }
reverse(str).split(/\s(?=\S+$)/).reverse().map(reverse)

ya da belki

re = /^\S+\s|.*/g;
[].concat.call(re.exec(str), re.exec(str))

2019 güncellemesi: ES2018'den itibaren lookbehind'ler desteklenmektedir:


str = "72 tocirah sneab"
s = str.split(/(?
Yorumlar (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"];

ama yine de daha hızlı bir yol olduğunu düşünüyorum.

Yorumlar (0)