2012-10-09 14 views
20

Soy nuevo en Jinja2 y hasta ahora he podido hacer la mayor parte de lo que quiero. Sin embargo, necesito usar expresiones regulares y parece que no puedo encontrar nada en ningún lugar en the documentation o en los Google.¿Cómo uso expresiones regulares en Jinja2?

Me gustaría crear una macro que imita el comportamiento de este en Javascript:

function myFunc(str) { 
    return str.replace(/someregexhere/, '').replace(' ', '_'); 
} 

que eliminará caracteres de una cadena y luego sustituir los espacios por guiones bajos. ¿Cómo puedo hacer esto con Jinja2?

Respuesta

26

Hay un filtro ya existente llamado replace que puede usar si no necesita una expresión regular. De lo contrario, puede registrarse un custom filter:

{# Replace method #} 
{{my_str|replace("some text", "")|replace(" ", "_")}} 

 

# Custom filter method 
def regex_replace(s, find, replace): 
    """A non-optimal implementation of a regex filter""" 
    return re.sub(find, replace, s) 

jinja_environment.filters['regex_replace'] = regex_replace 
+7

sí esta es la forma en que acabé yendo, por desgracia. es tonto no puedes usar expresiones regulares en jinja2 – Jason

+1

hey, man! Usted dice que es una implementación no óptima, ¿podría elaborar lo que se vería como el óptimo? – elias

+2

@elias - dado que 'find' se compila cada vez que es usado por' re.sub' si esto se usó como un filtro en un bucle grande podría * potencialmente * ser un cuello de botella. Si ese fuera el caso, podrías agregar una palabra clave arg al filtro ('cache') y compilar y almacenar' find' args cuando 'cache' se estableció en' True' - o simplemente podrías compilar y almacenar en caché todo 'find' argumentos y elija una estrategia de expulsión que mejor se adapte a su aplicación. –

Cuestiones relacionadas