Comment puis-je diviser une chaîne avec plusieurs séparateurs en javascript?
Comment diviser une chaîne avec plusieurs séparateurs en JavaScript? Je suis en train de séparer deux virgules et des espaces mais, autant que je sache, le JS de la scission de la fonction prend en charge un seul séparateur.
- J'ai eu ce problème en essayant de diviser les chemins d'accès aux fichiers qui ont été construits avec nodejs sous windows. Il y avait de l'avant "/" et "\" des barres obliques dans le même chemin parfois.
Vous devez vous connecter pour publier un commentaire.
Passer dans une regexp en tant que paramètre:
Modifiées afin d'ajouter:
Vous pouvez obtenir le dernier élément en sélectionnant la longueur du tableau moins 1:
... et si le modèle ne correspond pas:
(hello world)|\|
qui n'a pas tout à fait encore. Des idées?"hey guess what?hello world: it's my birthday|never say never"
et puis correspondance avec ce modèle/(hello world|\|)/g
(n'oubliez pas le/g
pour plusieurs hits). Je reçois deux matches lorsque je l'exécute dans une regex checker. Lui donner un essai."Hello awesome, world!".split(/([\s,]+)/)
=>["Hello", " ", "awesome", ", ", "world!"]
+
requis dans les deux premiers exemples? Semble fonctionner très bien sans. Avec le + vous allez vous retrouver en sautant sur les blancs, par exemple deux espaces et les virgules dans une rangée avec rien entre les deux, ce qui est susceptible de masquer des erreurs.Vous pouvez passer d'une expression régulière dans Javascript de la scission de l'opérateur. Par exemple:
Ou, si vous voulez permettre à plusieurs séparateurs ensemble pour agir comme un seul:
(Vous devez utiliser la non-capture (?:) parens, car sinon, il obtient épissé en arrière dans le résultat. Ou vous pouvez être intelligent comme Aaron et à l'utilisation d'une classe de caractères.)
(Exemples testés dans Safari + FF)
|
comme Jesse montre.Un autre, simple mais efficace, la méthode consiste à utiliser split + joindre à plusieurs reprises.
Essentiellement de faire un split suivie par une jointure, c'est comme un remplacement global cela remplace chaque séparateur avec une virgule puis une fois que tous sont remplacés il fait un partage final sur virgule
Le résultat de l'expression ci-dessus est:
Étendre sur ce vous pouvez également le placer dans une fonction:
Utilisation:
Si vous utilisez cette fonctionnalité beaucoup il pourrait même être utile d'envisager d'emballage
String.prototype.split
pour des raisons de commodité (je pense que ma fonction est assez sûr - la seule considération est la charge supplémentaire de la conditionnelles (mineur) et le fait qu'il manque une mise en œuvre de la limite de l'argument si un tableau est passé).Assurez-vous d'inclure les
splitMulti
fonction si l'utilisation de cette approche pour le dessous, il suffit de l'enveloppe :). Également intéressant de noter que certaines personnes froncer les sourcils sur l'extension de built-ins (comme beaucoup de gens le font mal et des conflits peuvent se produire) en cas de doute parler à quelqu'un de plus hauts avant d'utiliser ce produit ou demander ALORS 🙂Utilisation:
Profitez-en!
for(var i = 0; i < tokens.length; i++)
et pasfor(var i = 1; i < tokens.length; i++)
?tokens[1]
pour enregistrer une itération commetokens[0] == tempchar
et nous nous sommes répartis entempchar
après une itération surtokens
pour finir. Je vais mettre à jour la réponse en conséquence merci @tic :).Permet de garder les choses simples: (ajouter un "[ ]+" de votre RegEx signifie "1 ou plus")
Cela signifie "+" et "{1,}" sont les mêmes.
Délicat de la méthode:
:/
'('
pour/(/g
pour remplacer toutes les(
éléments -g
est le global drapeau de RegExp - il de rechercher toutes les occurrences de(
pas premierPour ceux d'entre vous qui veulent plus de personnalisation dans leur fractionnement de la fonction, j'ai écrit un algorithme récursif qui divise une chaîne de caractères avec une liste de caractères à split, sur. J'ai écrit ça avant, j'ai vu le post ci-dessus. J'espère que cela aide certains frustrés programmeurs.
Exemple ci-dessus retourne:
["people", "and", "other", "things"]
Remarque:
flatten
fonction a été prise à partir de Rosetta CodeVous pourriez juste le tas tous les caractères que vous souhaitez utiliser en tant que séparateurs, que ce soit individuellement ou collectivement dans une expression régulière et de les transmettre à la fonction de répartition. Par exemple, vous pourriez écrire:
Et la sortie sera:
Peut-être que vous devriez faire une sorte de chaîne de remplacer à son tour un séparateur dans l'autre séparateur pour ensuite avoir un seul séparateur à traiter dans votre split.
Hi par exemple, si vous avez de split et de remplacer dans la Chaîne 07:05:45PM
Résultat
À partir de @stephen-sweriduk solution (ce qui était le plus intéressant pour moi!), J'ai légèrement modifié afin de le rendre plus générique et réutilisable:
et puis
qui donne à l'arrière comme à l'original:
JS:
CSS:
ce sera le retour de la chaîne sans charecter.
Je trouve que l'une des principales raisons que j'ai besoin c'est de diviser les chemins de fichiers sur les deux
/
et\
. C'est un peu difficile de regex, donc je vais poster ici pour référence:Je pense que c'est plus facile si vous spécifiez ce que vous voulez quitter, au lieu de ce que vous voulez supprimer.
Que si vous voulez avoir seulement des mots anglais, vous pouvez utiliser quelque chose comme ceci:
Exemples (exécuter extrait):
JS:
HTML:
Je ne connais pas les performances de RegEx, mais voici une autre alternative pour les RegEx tire parti des indigènes HashSet et fonctionne en O( max(str.la longueur, le délimiteur.la longueur) ) complexité à la place:
Pas le meilleur moyen mais fonctionne à Split avec Plusieurs et Différents séparateurs/séparateurs
html
javascript
Voici une nouvelle voie pour atteindre même dans ES6:
JS:
Veuillez noter que dans cette fonction:
source
Résultat de code ci-dessus serait:
- Je utiliser regexp: