Como pesquisar seqüência CSV e retornar um jogo usando um regex Javascript
-
05-07-2019 - |
Pergunta
Eu estou tentando extrair o primeiro usuário com o botão direito do ponto e vírgula separados corda que corresponde a um padrão.
Usuários direitos são armazenados no formato:
LAA;LA_1;LA_2;LE_3;
String é vazio se o usuário não tem nenhum direito.
Meu melhor solução até agora é usar o seguinte regex na declaração Regex.Replace:
.*?;(LA_[^;]*)?.*
(O ponto de interrogação no final do grupo é com o propósito de combinar toda a linha no caso do usuário não tem o direito e substituí-lo com a corda vazia para sinal de que ela não tem.)
No entanto, ele não funciona corretamente no caso do procurou direita está na primeira posição:
LA_1;LA_2;LE_3;
É fácil corrigi-lo apenas adicionando um ponto e vírgula no início da linha antes de regex substituir, mas a minha pergunta é, por que não faz o seguinte regex combiná-lo?
.*?(?:(?:^|;)(LA_[^;]*))?.*
Eu tentei inúmeras outras expressões regulares para encontrar a solução, mas até agora sem sucesso.
Solução
Eu não estou certo de que obter a sua pergunta certa, mas no que diz respeito às expressões regulares você está usando, você está complicar-los sem nenhuma razão clara (pelo menos não para mim). Você pode querer algo como:
function getFirstRight(rights) {
var m = rights.match(/(^|;)(LA_[^;]*)/)
return m ? m[2] : "";
}
Outras dicas
Você poderia simplesmente dividir a string em primeiro lugar:
function getFirstRight(rights)
{
return rights.split(";",1)[0] || "";
}
Para responder à pergunta específica "porque não faz o seguinte regex combiná-lo?", Um dos problemas é a mistura de isso no início:
.*?
eventualmente, seguida por:
^|;
O que pode ser o mesmo que dizer, saltar sobre quaisquer caracteres extras até atingir o início ou um ponto e vírgula. Mas você não pode saltar sobre qualquer coisa e depois chegar no início (a menos que envolve novas linhas em uma string de múltiplas linhas).
Algo como isso funciona:
.*?(\bLA_[^;]).*
Ou seja, pular caracteres até um limite de palavra seguido de "LA _".