
cristiancambo
Desafortunadamente, a pesar de haber intentado aprender expresiones regulares al menos una vez al año durante tantos años como puedo recordar, siempre las olvido porque las uso con poca frecuencia. Este año, mi resolución de año nuevo es no volver a intentar aprender expresiones regulares: Así que este año para salvarme de las lágrimas se lo daré a Stack Overflow. (Remix de Las últimas Navidades).
Quiero pasar una cadena en este formato. {getThis}
y se devolverá la cadena getThis
. ¿Alguien podría ayudarme a cumplir mi resolución de año nuevo?
Preguntas relacionadas sobre Stack Overflow:
- ¿Cómo se pueden convertir las comillas regulares (es decir, ‘, “) en comillas LaTeX/TeX (es decir, `’, “”)
- Regex: para extraer una subcadena entre dos etiquetas en una cadena
- Regex para reemplazar todo \n en una cadena, pero no los que están dentro [code] [/code] etiqueta
Tratar
/{(.*?)}/
Eso significa, haga coincidir cualquier carácter entre { y }, pero no sea codicioso: haga coincidir la cadena más corta que termina con } (el ? deja de ser codicioso). Los paréntesis le permiten extraer la parte coincidente.
Otra forma sería
/{([^}]*)}/
Esto coincide con cualquier carácter excepto un carácter } (otra forma de no ser codicioso)

miau
/\{([^}]+)\}/
/ - delimiter
\{ - opening literal brace escaped because it is a special character used for quantifiers eg {2,3}
( - start capturing
[^}] - character class consisting of
^ - not
} - a closing brace (no escaping necessary because special characters in a character class are different)
+ - one or more of the character class
) - end capturing
\} - the closing literal brace
/ - delimiter

Kev
Si su cadena siempre tendrá ese formato, una expresión regular es una exageración:
>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"
substring(1
significa comenzar un carácter en (justo después del primer {
) y ,g.length-1)
significa tomar caracteres hasta (pero sin incluir) el carácter en la longitud de la cadena menos uno. Esto funciona porque la posición está basada en cero, es decir g.length-1
es la última posición.
Para lectores que no sean el cartel original: Si posee para ser una expresión regular, use /{([^}]*)}/
si desea permitir cadenas vacías, o /{([^}]+)}/
si solo desea hacer coincidir cuando hay al menos un carácter entre las llaves. Desglose:
/
: iniciar el patrón de expresiones regulares
{
: una llave literalmente
(
: empezar a capturar
[
: start defining a class of characters to capture
^}
: “anything other than }
“
]
: OK, esa es nuestra definición de clase completa
*
: cualquier número de caracteres que coincidan con la clase que acabamos de definir
)
: termine de capturar
}
: una llave literal debe seguir inmediatamente lo que capturamos
/
: finaliza el patrón de expresión regular

Mohamed Abo Elmagd
Prueba esto:
/[^{\}]+(?=})/g
Por ejemplo
Welcome to RegExr v2.1 by #{gskinner.com}, #{ssd.sd} hosted by Media Temple!
regresará gskinner.com
, ssd.sd
.

campana
Aquí hay una solución simple usando javascript replace
var st="{getThis}";
st = st.replace(/\{|\}/gi,''); // "getThis"
Como la respuesta aceptada anterior señala que el problema original se resuelve fácilmente con una subcadena, pero usar reemplazar puede resolver los casos de uso más complicados
Si tiene una cadena como “randomstring999[fieldname]”Usas un patrón ligeramente diferente para obtener el nombre del campo
var nameAttr = "randomstring999[fieldname]";
var justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"

Hemadri Dasari
Prueba esto
let path = "/{id}/{name}/{age}";
const paramsPattern = /[^{\}]+(?=})/g;
let extractParams = path.match(paramsPattern);
console.log("extractParams", extractParams) // prints all the names between {} = ["id", "name", "age"]

Alex Kessaris
Este funciona en Textmate y coincide con todo en un archivo CSS entre llaves.
\{(\s*?.*?)*?\}
selector {.
.
matches here
including white space.
.
.}
Si desea poder devolver el contenido, envuélvalo todo en un par de paréntesis más como este:
\{((\s*?.*?)*?)\}
y puede acceder a los contenidos a través de $1.
Esto también funciona para funciones, pero no lo he probado con corchetes anidados.
Esta pregunta se agregó a las Preguntas frecuentes sobre expresiones regulares de desbordamiento de pila, en “Advanced Regex-Fu”.
– una mente literal
10 de abril de 2014 a las 1:36
@Kobi: Las preguntas frecuentes son una wiki. Cualquiera puede editarlo. Así que edítalo.
– una mente literal
26 de abril de 2014 a las 11:33