expressão regular alternativa para isso “\ (asmx (/ js) |?! aspx | htm).”
-
18-09-2019 - |
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
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?$)