Pregunta de expresión regular dividida de JavaScript

116

hola Estoy intentando lo que pensé que sería una expresión regular bastante fácil en Javascript, pero me está dando muchos problemas. Quiero la capacidad de dividir una fecha a través de JavaScript dividiendo por un '-', '.', '/' Y ''.

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

¿Cuál es la expresión regular correcta para esto? Cualquier ayuda sería genial.

Craig
fuente

Respuestas:

174

Necesita poner los caracteres que desea dividir en una clase de caracteres , que le dice al motor de expresión regular "cualquiera de estos caracteres coincide". Para sus propósitos, esto se vería así:

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

Aunque los guiones tienen un significado especial en las clases de caracteres como un especificador de rango (es decir, [a-z]significa lo mismo que [abcdefghijklmnopqrstuvwxyz]), si lo coloca como lo último en la clase, se considera que significa un guión literal y no es necesario escapar.

Para explicar por qué su patrón no funcionó, /-./le dice al motor de expresiones regulares que coincida con un carácter de guión literal seguido de cualquier carácter (los puntos son caracteres comodín en las expresiones regulares). Con "02-25-2010", se dividiría cada vez que se encuentre "-2", porque el guión coincide y el punto coincide con "2".

Daniel Vandersluis
fuente
3
También puede mencionar que un punto no tiene ningún significado especial dentro de una clase de carácter; en lugar de actuar como un carácter comodín (lo que no tendría ningún sentido), actúa como un literal.
Bobby Jack
11

o simplemente (cualquier cosa menos números):

date.split(/\D/);
Jo3y
fuente
6

podrías usar

date.split(/-/);

o

date.split('-');
Allan Ruin
fuente
1
Coloque un salto de línea antes de su código y los 4 espacios lo formatearán correctamente.
Brandon
5

Luego divídalo en cualquier cosa menos en números:

date.split(/[^0-9]/);
inútil
fuente
3

Digamos que su cuerda es:

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

Desea dividir la cadena por los siguientes delimitadores:

  • Colon
  • Punto y coma
  • Nueva línea

Podrías dividir la cadena así:

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

Finalmente, es posible que deba recortar los elementos de la matriz:

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

o simplemente utilícelo para cadenas de fecha 2015-05-20 o 2015.05.20

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

prueba esto en su lugar

fecha.split (/ \ W + /)

Omar
fuente
¿Puede explicar por qué esta es una mejor respuesta que las 5+ ya publicadas antes? ¿Y cómo funciona realmente?
mjuarez
En realidad, esto funcionó mejor de todas las respuestas para mí.
reectrix