Question de regex fractionnée Javascript

116

bonjour j'essaye ce que je pensais être une regex assez facile en Javascript mais qui me donne beaucoup de mal. Je veux la possibilité de diviser une date via javascript fractionnement soit par un '-', '.', '/' Et ''.

var date = "02-25-2010";
var myregexp2 = new RegExp("-."); 
dateArray = date.split(myregexp2);

Quelle est la bonne expression régulière pour cela, toute aide serait formidable.

Craig
la source

Réponses:

174

Vous devez mettre les caractères que vous souhaitez diviser dans une classe de caractères , ce qui indique au moteur d'expression régulière "l'un de ces caractères est une correspondance". Pour vos besoins, cela ressemblerait à:

date.split(/[.,\/ -]/)

Bien que les tirets aient une signification particulière dans les classes de caractères en tant que spécificateur de plage (c'est-à-dire [a-z]signifiant la même chose que [abcdefghijklmnopqrstuvwxyz]), si vous le placez comme dernière chose dans la classe, cela signifie un tiret littéral et n'a pas besoin d'être échappé.

Pour expliquer pourquoi votre modèle n'a pas fonctionné, /-./indique au moteur d'expression régulière de faire correspondre un tiret littéral suivi de n'importe quel caractère (les points sont des caractères génériques dans les expressions régulières). Avec "02-25-2010", il se diviserait chaque fois que "-2" est rencontré, car le tiret correspond et le point correspond à "2".

Daniel Vandersluis
la source
3
Vous pouvez également mentionner qu'un point n'a aucune signification particulière à l'intérieur d'une classe de caractères - au lieu d'agir comme un caractère générique (ce qui n'aurait aucun sens), il agit comme un littéral.
Bobby Jack
11

ou juste (tout sauf des nombres):

date.split(/\D/);
Jo3y
la source
6

tu pourrais juste utiliser

date.split(/-/);

ou

date.split('-');
Ruine d'Allan
la source
1
Mettez un saut de ligne avant votre code et les 4 espaces le formateront correctement.
Brandon
5

Puis divisez-le sur autre chose que des nombres:

date.split(/[^0-9]/);
inutile
la source
3

Dites que votre chaîne est:

let str = `word1
word2;word3,word4,word5;word7
word8,word9;word10`;

Vous souhaitez diviser la chaîne par les délimiteurs suivants:

  • Côlon
  • Point virgule
  • Nouvelle ligne

Vous pouvez diviser la chaîne comme ceci:

let rawElements = str.split(new RegExp('[,;\n]', 'g'));

Enfin, vous devrez peut-être couper les éléments du tableau:

let elements = rawElements.map(element => element.trim());
Bobzius
la source
0

ou utilisez simplement pour les chaînes de date 20/05/2015 ou 20/05/2015

date.split(/\.|-/);
Piotr Stępniewski
la source
-1

essayez plutôt ceci

date.split (/ \ W + /)

Omar
la source
Pouvez-vous expliquer pourquoi c'est une meilleure réponse que les 5+ déjà publiées auparavant? Et comment ça marche réellement?
mjuarez
Cela a fonctionné le mieux de toutes les réponses pour moi.
reectrix le