Podría ser un duplicado; Pensé que esta pregunta tenía que haberse hecho ya, pero busqué y no pude encontrar ninguna.
¿Cómo determina, usando RegExp, si una subcadena está o no entre paréntesis?
Digamos que quiero verificar si el texto "zorro" está entre paréntesis en la siguiente oración:
The (quick) brown fox jumps (over the lazy) dog.Intenté este RegEx, pero resulta verdadero cuando "fox" en realidad no está entre paréntesis pero tiene paréntesis a la izquierda y a la derecha:
\(.*?fox.*?\)Lo probé con lookbehind negativo y lookahead negativo, y tampoco funciona:
\(.*?(?<!\)).*?fox.*?(?!\().*?\)Esto coincidirá con cualquier término entre paréntesis:
\(.*?\)El zorro marrón (rápido) salta (sobre) el perro perezoso.
Este signo de interrogación asegurará que la expresión regular sea 'perezosa' y solo coincidirá con la primera instancia de un paréntesis de cierre.
Eliminar el signo de interrogación de esta manera: \(.*\) le dará la siguiente coincidencia, que probablemente no sea lo que desea:
El zorro marrón (rápido) salta (sobre) el perro perezoso.
Si literalmente solo desea hacer coincidir "(zorro)", entonces la expresión regular correcta es:
\(fox\)Puede usar un probador de expresiones regulares en línea o un editor de texto para responder este tipo de preguntas.
Aquí hay una forma de garantizar que la palabra existe entre paréntesis internos solo sin existir en algo anidado:
https://regex101.com/r/UlQpM6/1
\([^()]*fox[^()]*\)
\( - Abierto
[^()]* - 0 o más de cualquier carácter que no esté entre paréntesis
fox - zorro
[^()]* - patrón de repetición
\) - Cerrar