Obtener texto entre dos corchetes redondeados

3 minutos de lectura

avatar de usuario
Vikas

como puedo recuperar la palabra my de entre los dos corchetes redondeados en la siguiente oración usando una expresión regular en JavaScript?

“Este es (mi) texto simple”

avatar de usuario
Michael Krelin – hacker

console.log(
  "This is (my) simple text".match(/\(([^)]+)\)/)[1]
);

\( siendo llave de apertura, ( — comienzo de la subexpresión, [^)]+ – cualquier cosa menos paréntesis de cierre una o más veces (es posible que desee reemplazar + con *), ) — fin de la subexpresión, \) – abrazadera de cierre. los match() devuelve una matriz ["(my)","my"] de donde se extrae el segundo elemento.

  • Puedes usar .+? en vez de [^)]+ también.

    – Ry-

    21 de agosto de 2012 a las 16:40

  • Sí, hay bastantes maneras de realizar la tarea.

    – Michael Krelin – hacker

    21 de agosto de 2012 a las 16:41

  • +1 Bonito, funcionó a las mil maravillas. Me gustaría agregarte para agregar esto tinyurl.com/mog7lr3 en su para una explicación visual. Gracias

    – Praveen

    26 de septiembre de 2013 a las 6:58

  • Usar .match(/\{(.+?)\}/g) si hay varios resultados

    – Stefan

    26 de febrero de 2021 a las 13:53


  • obtengo .match (…) es nulo cuando intento aplicar esto

    – anjit pariyar

    7 de septiembre a las 7:07

avatar de usuario
j08691

var txt = "This is (my) simple text";
re = /\((.*)\)/;
console.log(txt.match(re)[1]);​

js Ejemplo de violín

  • Si cambiamos el txt a txt = ‘Este es (mi) (simple) texto’ está dando ‘mi) (simple’ como salida. ¿Cómo podemos obtener solo mi? ¿Cómo podemos obtener contenido solo entre paréntesis coincidentes?

    – smita chougale

    7 de septiembre de 2017 a las 6:45

  • @smita cambia (.*) a (.*?) para coincidencias no codiciosas

    – skot

    15 de julio de 2019 a las 14:04


También puede probar un método sin expresiones regulares (por supuesto, si hay varios corchetes de este tipo, eventualmente necesitará un bucle o expresiones regulares)

init = txt.indexOf('(');
fin = txt.indexOf(')');
console.log(txt.substr(init+1,fin-init-1))

  • Más fácil de usar substring: txt.substring(init + 1, fin)

    – Ry-

    21 de agosto de 2012 a las 16:42

  • Dicho esto, sí, ir sin expresiones regulares es una opción que no debe subestimarse.

    – Michael Krelin – hacker

    21 de agosto de 2012 a las 16:44

  • @MichaelKrelin-hacker: entendió su punto, pero incluso su método regex no dará el resultado correcto si la cadena es algo así A ( está destinado a comenzar y luego terminar, como (mi).

    – Bestia Sexy

    21 de agosto de 2012 a las 16:47

  • Exactamente. La velocidad puede no ser un problema aquí, pero en general, las coincidencias de expresiones regulares requieren mucho tiempo.

    – Bestia Sexy

    21 de agosto de 2012 a las 16:48


  • @Cupidvogel, en este caso, la pregunta es qué quiere exactamente el OP en este caso. No me queda claro si el resultado que dará mi expresión regular es incorrecto. Es posible que desee cambiarlo a [^()] por supuesto, pero tampoco está claro si eso es correcto. Y sí, no solo el rendimiento, sino la tendencia popular de hacer todo con expresiones regulares que me harían votar tu respuesta si agregaras algunos controles 😉

    – Michael Krelin – hacker

    21 de agosto de 2012 a las 16:52

Para cualquiera que busque devolver varios textos entre varios corchetes

var testString = "(Charles) de (Gaulle), (Paris) [CDG]"
var reBrackets = /\((.*?)\)/g;
var listOfText = [];
var found;
while(found = reBrackets.exec(testString)) {
  listOfText.push(found[1]);
};

Use esto para obtener texto entre los más cercanos ( y ):

const string = "This is (my) (simple (text)"
console.log( string.match(/\(([^()]*)\)/)[1] )
console.log( string.match(/\(([^()]*)\)/g).map(function($0) { return $0.substring(1,$0.length-1) }) )

Resultados: my y ["my","text"].

EXPLICACIÓN

--------------------------------------------------------------------------------
  \(                       '('
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [^()]*                   any character except: '(', ')' (0 or
                             more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  \)                       ')'

  • Buen trazador de líneas, estaré usando esto

    – usuario1503606

    1 de junio a las 9:54

avatar de usuario
Usman Shah

para obtener campos de fórmula de cadena.

var txt = "{{abctext/lsi)}} = {{abctext/lsi}} + {{adddddd}} / {{ttttttt}}";
re = /\{{(.*?)\}}/g;
console.log(txt.match(re));

  • Buen trazador de líneas, estaré usando esto

    – usuario1503606

    1 de junio a las 9:54

avatar de usuario
Ron

para devolver varios elementos entre paréntesis redondeados

 var res2=str.split(/(|)/);

  var items=res2.filter((ele,i)=>{
  if(i%2!==0) {
  return ele;
  }
});

¿Ha sido útil esta solución?