Pergunta

Existe uma maneira de reescrever essa expressão regex de tal forma que ele não inclui uma visão antecipada para "/ js"?

É este mesmo algo que eu deveria se preocupar em termos de desempenho? Ele está sendo usado para solicitações HTTP filtro.

\.(asmx(?!/js)|aspx|htm)

Editar: Para ser claro: eu gostaria de evitar que especificamente ".asmx / js", mas permitir que todos os outros pedidos .asmx completamente.

BAD: Portal.asmx/js
GOOD: Portal.asmx/UpdateProduct
Foi útil?

Solução

Se você quiser bloco Portal.asmx/js mas permitir Portal.asmx/UpdateProduct há duas maneiras de lidar com isso -. Um padrão whitelist listando todos os valores aceitos, ou um lookahead negativo para as correspondências indesejadas

Um lookahead negativo é quase certo que vai ser melhor desempenho do que listar todos os valores aceitáveis.

No entanto, simplesmente usando a sua expressão existente não corresponder exatamente o que você quer. Ele iria bloquear, por exemplo, Portal.asmx/json e permitir Portal.asmx/js.aspx -. Que pode não ser URLs prováveis, mas simplesmente destacar o que precisa de conserto

Esta expressão (copiado de resposta eyelidlessness) irá lidar com as coisas de forma apropriada:

\.(asmx(?!/js[/\z])|aspx$|html?$)


Vale a pena explicar que a classe de personagem [/\z] irá corresponder a qualquer / ou <end of string> -. A \z é o mesmo que a $ mas obras em classes de personagens (onde o $ corresponderia a um caractere $ literal)
(Existem diferenças entre $ e \z mas apenas em modo de várias linhas, o que não é relevante para a filtragem de URL).


Em geral, não se preocupe com o desempenho, a menos que você tem um mensurável problema de desempenho (caso contrário, como você vai saber se o que você mudou feito qualquer diferença).

Outras dicas

Não se preocupe com o desempenho de uma antecipação tão simples. Seu regex é bom.

Edit: Mas pode pegar falsos positivos (por exemplo Portal.asmx / jssomething), você pode tentar algo como:

\.(asmx(?!/js[/\z])|aspx$|html?$)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top