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.

Foi útil?

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 _".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top