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.

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".


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/);

6

tu pourrais juste utiliser

date.split(/-/);

ou

date.split('-');

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]/);

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());


-1

essayez plutôt ceci

date.split (/ \ W + /)


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.