Je n'ai pas obtenu une expression régulière optimisée qui m'a divisé une chaîne en se basant sur la première occurrence d'espace blanc:
var str="72 tocirah sneab";
J'ai besoin d'avoir:
[
"72",
"tocirah sneab",
]
javascript
regex
Luca
la source
la source
Réponses:
Si vous ne vous souciez que du caractère d'espace (et non des tabulations ou d'autres caractères d'espacement) et que vous ne vous souciez que de tout avant le premier espace et de tout après le premier espace, vous pouvez le faire sans une expression régulière comme celle-ci:
Notez que s'il n'y a pas d'espace du tout, 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).
la source
Javascript ne prend pas en charge les lookbehinds, ce
split
n'est donc pas possible.match
travaux:Une autre astuce:
que diriez-vous:
et pourquoi pas
ou peut-être
Mise à jour 2019 : à partir de l'ES2018, les lookbehinds sont pris en charge:
la source
str.match(/^(\S+)\s(.*)/).slice(1)
ne fonctionnera pas pour une chaîne qui n'a pas d'espaceDans ES6, vous pouvez également
la source
Tard dans le jeu, je sais mais il semble y avoir un moyen très simple de le faire:
Cela partira
arr[0]
avec"72"
etarr[1]
avec"tocirah sneab"
. Notez que arr [2] sera vide, mais vous pouvez simplement l'ignorer.Pour référence:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split#Capturing_parentheses
la source
mais je pense toujours qu'il existe un moyen plus rapide.
la source
La solution de georg est agréable, mais se casse si la chaîne ne contient aucun espace. Si vos chaînes ont une chance de ne pas contenir d'espaces, il est plus sûr d'utiliser .split et de capturer des groupes comme ceci:
la source
Vous pouvez également utiliser .replace pour remplacer uniquement la première occurrence,
En laissant de côté le / g.
DEMO
la source
Divisez simplement la chaîne en un tableau et collez les parties dont vous avez besoin ensemble. Cette approche est très flexible, elle fonctionne dans de nombreuses situations et il est facile de raisonner. De plus, vous n'avez besoin que d'un seul appel de fonction.
Alternativement, si vous voulez choisir ce dont vous avez besoin directement à partir de la chaîne, vous pouvez faire quelque chose comme ceci:
Ou comme ça:
Cependant, je suggère le premier exemple.
Démo de travail: jsbin
la source
Chaque fois que j'ai besoin d'obtenir une classe à partir d'une liste de classes ou d'une partie d'un nom de classe ou d'un identifiant, j'utilise toujours split () puis je l'obtiens spécifiquement avec l'index du tableau ou, le plus souvent dans mon cas, pop () pour obtenir le dernier élément ou shift () pour obtenir le premier.
Cet exemple récupère les classes du div "gallery_148 ui-sortable" et renvoie l'ID de galerie 148.
Je suis sûr qu'il pourrait être compacté en moins de lignes, mais je l'ai laissé élargi pour plus de lisibilité.
la source
J'avais besoin d'un résultat légèrement différent.
Je voulais le premier mot, et ce qui est venu après - même s'il était vide.
donc si l'entrée est
oneword
vous obtenezoneword
et''
.Si l'entrée est,
one word and some more
vous obtenezone
etword and some more
.la source
Je ne sais pas pourquoi toutes les autres réponses sont si compliquées, alors que vous pouvez tout faire en une seule ligne, en gérant également le manque d'espace.
À titre d'exemple, obtenons le premier et les "autres" composants d'un nom:
la source
La fonction suivante divisera toujours la phrase en 2 éléments. Le premier élément ne contiendra que le premier mot et le deuxième élément contiendra tous les autres mots (ou ce sera une chaîne vide).
la source