Como faço para dividir uma string com vários separadores em JavaScript? Estou tentando dividir vírgulas e espaços, mas, AFAIK, a função de divisão do JS suporta apenas um separador.
javascript
regex
split
mikemaccana
fonte
fonte
Respostas:
Passe uma regexp como o parâmetro:
Editado para adicionar:
Você pode obter o último elemento selecionando o comprimento da matriz menos 1:
... e se o padrão não corresponder:
fonte
(hello world)|\|
quais ainda não funcionaram. Alguma ideia?Você pode passar uma regex para o operador de divisão do Javascript . Por exemplo:
Ou, se você deseja permitir que vários separadores juntos atuem como um só:
(Você precisa usar o não-capturante (? :) parens porque, caso contrário, ele será reposto no resultado. Ou você pode ser inteligente como Aaron e usar uma classe de personagem.)
(Exemplos testados no Safari + FF)
fonte
|
como mostra Jesse.Outro método simples, porém eficaz, é usar split + join repetidamente.
Essencialmente, fazer uma divisão seguida por uma junção é como uma substituição global; portanto, isso substitui cada separador por vírgula; depois que todos são substituídos, ele faz uma divisão final por vírgula
O resultado da expressão acima é:
Expandindo isso, você também pode colocá-lo em uma função:
Uso:
Se você usa muito essa funcionalidade, pode até valer a pena considerar o agrupamento
String.prototype.split
por conveniência (acho que minha função é razoavelmente segura - a única consideração é a sobrecarga adicional dos condicionais (secundários) e o fato de não haver uma implementação do argumento limite se uma matriz for passada).Certifique-se de incluir a
splitMulti
função se usar esta abordagem para a abaixo simplesmente a envolve :). Também vale a pena notar que algumas pessoas desaprovam a extensão de built-ins (como muitas pessoas fazem errado e podem ocorrer conflitos); portanto, em caso de dúvida, fale com alguém mais experiente antes de usar isso ou pergunte no SO :)Uso:
Aproveitar!
fonte
for(var i = 0; i < tokens.length; i++)
e nãofor(var i = 1; i < tokens.length; i++)
?tokens[1]
a salvar uma iteraçãotokens[0] == tempchar
e dividimostempchar
após a iteraçãotokens
para concluir. Vou atualizar a resposta de acordo, obrigado @tic :).Vamos simplificar: (adicione um "[] +" ao seu RegEx significa "1 ou mais")
Isso significa que "+" e "{1,}" são iguais.
fonte
Método complicado:
fonte
:/
'('
para/(/g
substituir todos os(
elementos -g
é o mundial da bandeira para RegExp - por isso procurar todas as ocorrências de(
não primeiroPara aqueles que desejam mais personalização em sua função de divisão, escrevi um algoritmo recursivo que divide uma determinada string com uma lista de caracteres para dividir. Eu escrevi isso antes de ver o post acima. Espero que ajude alguns programadores frustrados.
O exemplo acima retorna:
["people", "and", "other", "things"]
Nota: a
flatten
função foi retirada do Código Rosettafonte
Você pode agrupar todos os caracteres que deseja usar como separadores, singular ou coletivamente, em uma expressão regular e passá-los para a função de divisão. Por exemplo, você pode escrever:
E a saída será:
fonte
Talvez você deva fazer algum tipo de substituição de string para transformar um separador em outro separador, para ter apenas um separador na sua divisão.
fonte
Oi, por exemplo, se você dividiu e substituiu na String 07:05:45 PM
Resultado
fonte
Aqui está uma nova maneira de obter o mesmo no ES6 :
Observe nesta função:
source
O resultado do código acima seria:
fonte
isso retornará a string sem um caractere especial.
fonte
Minha refatoração da resposta @Brian
fonte
Acho que uma das principais razões pelas quais eu preciso disso é dividir os caminhos de arquivo em ambos
/
e\
. É um pouco de regex complicado, por isso vou publicá-lo aqui para referência:fonte
Eu acho que é mais fácil se você especificar o que deseja sair, em vez do que deseja remover.
Como se você quiser ter apenas palavras em inglês, pode usar algo como isto:
Exemplos (snippet de execução):
fonte
A partir da solução @ stephen-sweriduk (que foi a mais interessante para mim!), Eu a modifiquei levemente para torná-la mais genérica e reutilizável:
e depois
que retribui como o original:
fonte
Mostrar snippet de código
fonte
Fornecerei uma implementação clássica para essa função. O código funciona em quase todas as versões do JavaScript e é de alguma forma ideal.
Apenas código puro:
Você pode ver o código em execução no playground: https://codeguppy.com/code.html?IJI0E4OGnkyTZnoszAzf
fonte
Não sei o desempenho do RegEx, mas aqui está outra alternativa para o RegEx aproveita o HashSet nativo e trabalha com complexidade O (max (str.length, delimeter.length)):
fonte
Não é a melhor maneira, mas funciona para dividir com vários e diferentes separadores / delimitadores
html
javascript
fonte
Eu uso o regexp:
fonte