185 votes

Séparer la chaîne de caractères au premier espace blanc

Je n'ai pas obtenu de regex optimisée qui divise une chaîne de caractères basée sur la première occurrence d'espace blanc :

var str="72 tocirah sneab";

J'en ai besoin :

[
    "72",
    "tocirah sneab",
]

392voto

Trott Points 16299

Si vous ne vous intéressez qu'au caractère espace (et non aux tabulations ou aux autres caractères d'espacement) et que vous ne vous intéressez qu'à tout ce qui se trouve avant le premier espace et à tout ce qui se trouve après le premier espace, vous pouvez le faire sans expression régulière comme ceci :

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

Notez que s'il n'y a aucun espace, la première ligne renverra une chaîne vide et la deuxième ligne renverra la chaîne entière. Assurez-vous que c'est le comportement que vous souhaitez dans cette situation (ou que cette situation ne se produira pas).

73voto

georg Points 52691

Le Javascript ne supporte pas le lookbehinds, donc split n'est pas possible. match travaux :

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

Une autre astuce :

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

comment :

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

et pourquoi pas

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

ou peut-être

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

Mise à jour de 2019 : à partir de ES2018, les lookbehinds sont supportés :

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

38voto

user1652176 Points 399

En ES6, vous pouvez également

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

28voto

Cliff Stanford Points 11

Je sais que je suis en retard, mais il semble y avoir un moyen très simple de le faire :

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

Cela laissera arr[0] avec "72" y arr[1] avec "tocirah sneab" . Notez que arr[2] sera vide, mais vous pouvez l'ignorer.

Pour référence :

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

16voto

Joseph the Dreamer Points 43727
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"];

mais je pense toujours qu'il y a un moyen plus rapide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X