Estoy tratando de escribir una expresión regular para Javascript que pueda seleccionar todos los espacios en blanco entre corchetes de AMPScript , la sintaxis para Lang es algo como esto
%%[ set @truth = 'this is amp' IF @truth == 'this is amp' THEN set @response = 'amp rocks' ELSE set @response = '️...' ENDIF ]%%Hasta ahora, puedo seleccionar todos los caracteres dentro de los corchetes dados usando esta expresión:
%%\[(\s|.)*?\]%%Pero esto selecciona todos los caracteres dentro del recinto, ¿hay algún método que pueda usar para seleccionar solo espacios/nuevas líneas/tabindents solamente?
¡Gracias por adelantado!
Creo que esto es lo que quieres:
(?<=%%\[(\s|.)*)\s*(?=(\s|.)*\]%%)https://regex101.com/r/EWhbuX/1
Aquí hay un desglose de la expresión regular:
Primero empezamos con un Positive Lookbehind (?<= )
Esto asegurará que el patrón que sigue a este esté precedido por el patrón interior, pero no se incluirá en las coincidencias.
En este caso, queremos que nuestro patrón de coincidencia esté precedido por %%[ y cualquier otro carácter %%\[(\s|.)*
Entonces, nuestro código resultante para Positive Lookbehind es
(?<=%%\[(\s|.)*)Luego viene el patrón que realmente queremos hacer coincidir después de nuestro Lookabehind y (alerta de spoiler), antes de un Lookahead que definiremos más adelante.
En este caso, es cualquier carácter de espacio en blanco , por lo que nuestro patrón será
\s(Sí, acabo de darme cuenta de que ni siquiera necesitamos el * en mi respuesta original)
De manera similar a lo que hicimos al comienzo de la expresión con Lookbehind, ahora necesitamos un Lookahead positivo (?= )
Esto es para asegurarse de que nuestros espacios en blanco sean seguidos por cualquier carácter y ]%% (\s|.)*\]%% .
Así que este es nuestro Lookahead resultante:
(?=(\s|.)*\]%%)¡Pon todo junto y tendrás tu expresión regular!
(?<=%%\[(\s|.)*)\s(?=(\s|.)*\]%%)