Domanda regex suddivisa in JavaScript


116

ciao, sto provando quella che pensavo fosse una regex piuttosto semplice in Javascript ma mi sta dando molti problemi. Voglio la possibilità di dividere una data tramite javascript suddividendola per '-', '.', '/' E ''.

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

Qual è la regex corretta per questo qualsiasi aiuto sarebbe fantastico.

Risposte:


174

È necessario inserire i caratteri su cui si desidera suddividere in una classe di caratteri , che indica al motore delle espressioni regolari "uno qualsiasi di questi caratteri è una corrispondenza". Per i tuoi scopi, questo sarebbe:

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

Sebbene i trattini abbiano un significato speciale nelle classi di caratteri come identificatore di intervallo (cioè [a-z]significa lo stesso di [abcdefghijklmnopqrstuvwxyz]), se lo metti come ultima cosa nella classe, viene considerato un trattino letterale e non è necessario eseguire l'escape.

Per spiegare perché il tuo pattern non ha funzionato, /-./indica al motore delle espressioni regolari di trovare una corrispondenza con un trattino letterale seguito da qualsiasi carattere (i punti sono caratteri jolly nelle espressioni regolari). Con "02-25-2010", si divide ogni volta che si incontra "-2", perché il trattino corrisponde e il punto corrisponde a "2".


3
Potresti anche menzionare che un punto non ha alcun significato speciale all'interno di una classe di caratteri: invece di agire come un carattere jolly (che non avrebbe alcun senso), agisce come un letterale.
Bobby Jack

11

o semplicemente (qualsiasi cosa tranne i numeri):

date.split(/\D/);

6

potresti semplicemente usare

date.split(/-/);

o

date.split('-');

1
Metti un'interruzione di riga prima del codice e i 4 spazi lo formatteranno correttamente.
Brandon

5

Quindi dividerlo su qualsiasi cosa tranne i numeri:

date.split(/[^0-9]/);

3

Supponi che la tua stringa sia:

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

Vuoi dividere la stringa con i seguenti delimitatori:

  • Colon
  • Punto e virgola
  • Nuova linea

Puoi dividere la stringa in questo modo:

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

Infine, potrebbe essere necessario tagliare gli elementi nell'array:

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

0

o semplicemente utilizzare per le stringhe di data 2015-05-20 o 2015.05.20

date.split(/\.|-/);

-1

prova questo invece

date.split (/ \ W + /)


Puoi spiegare perché questa è una risposta migliore rispetto alla 5+ già pubblicata in precedenza? E come funziona effettivamente?
mjuarez

Questo in realtà ha funzionato al meglio tra tutte le risposte per me.
reectrix
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.