Pergunta sobre regex dividido em Javascript

116

Olá, estou tentando o que pensei que seria um regex bastante fácil em Javascript, mas está me dando muitos problemas. Desejo a capacidade de dividir uma data via javascript dividindo por '-', '.', '/' E ''.

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

Qual é a regex correta para isso, toda e qualquer ajuda seria ótima.

Craig
fonte

Respostas:

174

Você precisa colocar os caracteres que deseja dividir em uma classe de caractere , que informa ao mecanismo de expressão regular "qualquer um desses caracteres é uma correspondência". Para seus propósitos, seria o seguinte:

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

Embora os traços tenham um significado especial nas classes de caracteres como um especificador de intervalo (ou seja, [a-z]significam o mesmo que [abcdefghijklmnopqrstuvwxyz]), se você colocá-los como a última coisa na classe, será considerado um traço literal e não precisa ser escapado.

Para explicar por que seu padrão não funcionou, /-./diga ao mecanismo de expressão regular para corresponder a um caractere de traço literal seguido por qualquer caractere (os pontos são caracteres curinga em expressões regulares). Com "02-25-2010", ele se dividiria sempre que "-2" fosse encontrado, porque o traço corresponde e o ponto corresponde a "2".

Daniel Vandersluis
fonte
3
Você também pode mencionar que um ponto não tem nenhum significado especial dentro de uma classe de caractere - em vez de atuar como um caractere curinga (o que não faria nenhum sentido), ele age como um literal.
Bobby Jack
11

ou apenas (qualquer coisa menos números):

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

você poderia apenas usar

date.split(/-/);

ou

date.split('-');
Allan Ruin
fonte
1
Coloque uma quebra de linha antes de seu código e os 4 espaços irão formatá-lo corretamente.
Brandon
5

Em seguida, divida em qualquer coisa, menos em números:

date.split(/[^0-9]/);
sem utilidade
fonte
3

Diga que sua string é:

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

Você deseja dividir a string pelos seguintes delimitadores:

  • Cólon
  • Ponto e vírgula
  • Nova linha

Você pode dividir a string assim:

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

Por fim, pode ser necessário cortar os elementos da matriz:

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

ou apenas use para strings de data 20/05/2015 ou 20/05/2015

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

tente isso ao invés

date.split (/ \ W + /)

Omar
fonte
Você pode explicar por que esta é uma resposta melhor do que as 5+ já postadas antes? E como realmente funciona?
mjuarez
Isso realmente funcionou melhor em todas as respostas para mim.
reectrix