Comment diviser une chaîne avec plusieurs séparateurs en JavaScript? J'essaie de séparer les virgules et les espaces, mais, AFAIK, la fonction de fractionnement de JS ne prend en charge qu'un seul séparateur.
javascript
regex
split
mikemaccana
la source
la source
Réponses:
Passez une expression rationnelle comme paramètre:
Modifié pour ajouter:
Vous pouvez obtenir le dernier élément en sélectionnant la longueur du tableau moins 1:
... et si le motif ne correspond pas:
la source
(hello world)|\|
qui ne fonctionnaient pas encore tout à fait. Des idées?Vous pouvez passer une expression régulière dans l'opérateur de division de Javascript . Par exemple:
Ou, si vous souhaitez autoriser plusieurs séparateurs ensemble à agir comme un seul:
(Vous devez utiliser les parens non capturants (? :) car sinon, ils sont épissés dans le résultat. Ou vous pouvez être intelligent comme Aaron et utiliser une classe de caractères.)
(Exemples testés dans Safari + FF)
la source
|
comme le montre Jesse.Une autre méthode simple mais efficace consiste à utiliser split + join à plusieurs reprises.
Essentiellement, faire un fractionnement suivi d'une jointure est comme un remplacement global, ce qui remplace chaque séparateur par une virgule, puis une fois tous remplacés, il effectue un fractionnement final sur une virgule
Le résultat de l'expression ci-dessus est:
En développant cela, vous pouvez également le placer dans une fonction:
Usage:
Si vous utilisez beaucoup cette fonctionnalité, il pourrait même être utile d'envisager un emballage
String.prototype.split
pour plus de commodité (je pense que ma fonction est assez sûre - la seule considération est le surcoût supplémentaire des conditions (mineur) et le fait qu'il manque une implémentation de l'argument limit si un tableau est passé).Assurez-vous d'inclure la
splitMulti
fonction si vous utilisez cette approche ci-dessous pour l'enrouler simplement :). Il convient également de noter que certaines personnes désapprouvent l'extension des fonctionnalités intégrées (car de nombreuses personnes le font mal et des conflits peuvent survenir), donc en cas de doute, parlez à quelqu'un de plus âgé avant d'utiliser cela ou demandez SO SO :)Usage:
Prendre plaisir!
la source
for(var i = 0; i < tokens.length; i++)
et nonfor(var i = 1; i < tokens.length; i++)
?tokens[1]
enregistrer une itération soustokens[0] == tempchar
et nous noustempchar
séparons après avoir répététokens
pour terminer. Je mettrai à jour la réponse en conséquence merci @tic :).Permet de rester simple: (ajouter un "[] +" à votre RegEx signifie "1 ou plus")
Cela signifie que "+" et "{1,}" sont identiques.
la source
Méthode délicate:
la source
:/
'('
pour/(/g
remplacer tous les(
éléments -g
est le drapeau global pour RegExp - donc il recherche toutes les occurrences de(
pas le premierPour ceux d'entre vous qui souhaitent plus de personnalisation dans leur fonction de fractionnement, j'ai écrit un algorithme récursif qui fractionne une chaîne donnée avec une liste de caractères à fractionner. J'ai écrit ceci avant de voir le post ci-dessus. J'espère que cela aide certains programmeurs frustrés.
L'exemple ci-dessus renvoie:
["people", "and", "other", "things"]
Remarque: la
flatten
fonction provient du code Rosettala source
Vous pouvez simplement regrouper tous les caractères que vous souhaitez utiliser comme séparateurs soit individuellement soit collectivement dans une expression régulière et les transmettre à la fonction de fractionnement. Par exemple, vous pourriez écrire:
Et la sortie sera:
la source
Vous devriez peut-être faire une sorte de remplacement de chaîne pour transformer un séparateur en l'autre séparateur afin que vous n'ayez alors qu'un seul séparateur à traiter dans votre fractionnement.
la source
Salut par exemple si vous avez divisé et remplacé dans String 07:05:45 PM
Résultat
la source
Voici une nouvelle façon d'y parvenir dans ES6 :
Veuillez noter dans cette fonction:
source
Le résultat du code ci-dessus serait:
la source
cela retournera la chaîne sans caractère spécial.
la source
Mon refactor de @Brian réponse
la source
Je trouve que l'une des principales raisons pour lesquelles j'ai besoin de cela est de diviser les chemins de fichiers sur
/
et\
. C'est un peu une expression rationnelle difficile, donc je vais le poster ici pour référence:la source
Je pense que c'est plus facile si vous spécifiez ce que vous voulez laisser, au lieu de ce que vous voulez supprimer.
Comme si vous ne voulez avoir que des mots anglais, vous pouvez utiliser quelque chose comme ceci:
Exemples (exécuter un extrait):
la source
À partir de la solution @ stephen-sweriduk (qui était la plus intéressante pour moi!), Je l'ai légèrement modifiée pour la rendre plus générique et réutilisable:
et alors
qui redonne comme l'original:
la source
Afficher l'extrait de code
la source
Je vais fournir une implémentation classique pour une telle fonction. Le code fonctionne dans presque toutes les versions de JavaScript et est en quelque sorte optimal.
Juste du code pur:
Vous pouvez voir le code s'exécuter dans la cour de récréation: https://codeguppy.com/code.html?IJI0E4OGnkyTZnoszAzf
la source
Je ne connais pas les performances de RegEx, mais voici une autre alternative pour RegEx qui exploite HashSet natif et fonctionne à la place en complexité O (max (str.length, delimeter.length)):
la source
Pas le meilleur moyen mais fonctionne pour diviser avec des séparateurs / délimiteurs multiples et différents
html
javascript
la source
J'utilise regexp:
la source