it-swarm.com.de

Geteilte Zeichenfolge beim ersten Auftreten von Leerzeichen

Ich habe keinen optimierten regulären Ausdruck erhalten, der mir einen String aufteilt, basierend auf dem ersten Auftreten von Leerzeichen:

var str="72 tocirah sneab";

Ich benötige:

[
    "72",
    "tocirah sneab",
]
129
Luca

Wenn Sie sich nur um das Leerzeichen (und nicht um Tabulatoren oder andere Leerzeichen) und nur um alles vor dem ersten Leerzeichen und alles nach dem ersten Leerzeichen kümmern, können Sie auf einen regulären Ausdruck wie diesen verzichten:

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

Beachten Sie, dass, wenn überhaupt kein Leerzeichen vorhanden ist, die erste Zeile eine leere Zeichenfolge und die zweite Zeile die gesamte Zeichenfolge zurückgibt. Stellen Sie sicher, dass dies das gewünschte Verhalten in dieser Situation ist (oder dass diese Situation nicht auftritt).

289
Trott

Javascript unterstützt keine Lookbehinds, daher ist split nicht möglich. match funktioniert:

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

Ein weiterer Trick:

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

wie wäre es mit:

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

und warum nicht

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

oder vielleicht

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

pdate 2019: Ab ES2018 werden Lookbehinds unterstützt:

str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)
45
georg

In ES6 können Sie auch

let [first, ...second] = str.split(" ")
second = second.join(" ")
26
user1652176

Spät zum Spiel, ich weiß, aber es scheint einen sehr einfachen Weg zu geben, dies zu tun:

const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);

Dies wird arr[0] Mit "72" Und arr[1] Mit "tocirah sneab" Belassen. Beachten Sie, dass arr [2] leer ist, aber Sie können es einfach ignorieren.

Als Referenz:

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

14
Cliff Stanford
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"];

aber ich denke immer noch, dass es einen schnelleren Weg gibt.

13
Joseph

georgs lösung ist Nice, bricht aber, wenn der string kein whitespace enthält. Wenn Ihre Zeichenfolgen möglicherweise keine Leerzeichen enthalten, ist es sicherer, .split zu verwenden und Gruppen wie folgt zu erfassen:

str_1 = str.split(/\s(.+)/)[0];  //everything before the first space
str_2 = str.split(/\s(.+)/)[1];  //everything after the first space
11
fpscolin

Sie können auch .replace verwenden, um nur das erste Vorkommen zu ersetzen.

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

/ G weglassen.

[~ # ~] Demo [~ # ~]

9
Daedalus

Teilen Sie die Zeichenfolge einfach in ein Array auf und kleben Sie die benötigten Teile zusammen. Dieser Ansatz ist sehr flexibel, funktioniert in vielen Situationen und ist leicht zu überlegen. Außerdem benötigen Sie nur einen Funktionsaufruf.

arr = str.split(' ');             // ["72", "tocirah", "sneab"]
strA = arr[0];                    // "72"
strB = arr[1] + ' ' + arr[2];     // "tocirah sneab"

Wenn Sie das, was Sie brauchen, direkt aus der Zeichenfolge auswählen möchten, können Sie auch Folgendes tun:

strA = str.split(' ')[0];                    // "72";
strB = str.slice(strA.length + 1);           // "tocirah sneab"

Oder so:

strA = str.split(' ')[0];                    // "72";
strB = str.split(' ').splice(1).join(' ');   // "tocirah sneab"

Ich schlage jedoch das erste Beispiel vor.

Arbeitsdemo: jsbin

2
Rotareti

Wenn ich eine Klasse aus einer Liste von Klassen oder einem Teil eines Klassennamens oder einer ID abrufen möchte, verwende ich immer split (), um sie entweder speziell mit dem Array-Index abzurufen, oder, in meinem Fall, mit pop () das letzte Element oder shift (), um das erste zu erhalten.

In diesem Beispiel werden die Klassen des Div "gallery_148 ui-sortable" abgerufen und die Galerie-ID 148 zurückgegeben.

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 

Ich bin sicher, dass es in weniger Zeilen komprimiert werden könnte, aber ich habe es aus Gründen der Lesbarkeit erweitert.

0
acarito

Ich brauchte ein etwas anderes Ergebnis.

Ich wollte das erste Wort und was auch immer danach kam - auch wenn es leer war.

str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' '));
str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1);

wenn die Eingabe also oneword ist, erhalten Sie oneword und ''.

Ist die Eingabe one Word and some more Sie erhalten one und Word and some more.

0
jim.richards