Holen Sie sich Text zwischen zwei runden Klammern

Lesezeit: 3 Minuten

Benutzeravatar von Vikas
Vikas

Wie kann ich das Wort abrufen my zwischen den beiden runden Klammern im folgenden Satz mit einer Regex in JavaScript?

“Das ist (mein) einfacher Text”

Michael Krelin - Benutzeravatar des Hackers
Michael Krelin – Hacker

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

\( öffnende Klammer sein, ( — Beginn des Unterausdrucks, [^)]+ – alles andere als eine oder mehrere schließende Klammern (Sie können ersetzen + mit *), ) — Ende des Unterausdrucks, \) — schließende Klammer. Das match() gibt ein Array zurück ["(my)","my"] aus der das zweite Element extrahiert wird.

  • Sie können verwenden .+? Anstatt von [^)]+ zu.

    – Ry-

    21. August 2012 um 16:40 Uhr

  • Ja, es gibt einige Möglichkeiten, die Aufgabe zu erfüllen.

    – Michael Krelin – Hacker

    21. August 2012 um 16:41 Uhr

  • +1 Schön, hat wie ein Zauber funktioniert. Ich möchte Sie hinzufügen, um dies hinzuzufügen tinyurl.com/mog7lr3 in Ihrem für eine visuelle Erklärung. Vielen Dank

    – Praveen

    26. September 2013 um 6:58 Uhr

  • Verwenden .match(/\{(.+?)\}/g) wenn es mehrere Ergebnisse gibt

    – Stefan

    26. Februar 2021 um 13:53 Uhr


  • Ich bekomme .match (…) ist null, wenn ich versuche, dies anzuwenden

    – anjit pariyar

    7. September um 7:07

Benutzeravatar von j08691
j08691

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

jsFiddle-Beispiel

  • Wenn wir txt in txt = ‘This is (my) (simple) text’ ändern, wird ‘my) (simple’ als Ausgabe ausgegeben. Wie können wir nur my erhalten. Wie können wir nur Inhalte innerhalb passender Klammern erhalten?

    – smita chougale

    7. September 2017 um 6:45 Uhr

  • @smita ändern Sie (.*) in (.*?) für nicht-gierigen Abgleich

    – skot

    15. Juli 2019 um 14:04 Uhr


Sie können auch eine Nicht-Regex-Methode ausprobieren (natürlich, wenn es mehrere solcher Klammern gibt, wird es schließlich Schleifen oder Regex brauchen)

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

  • Einfacher zu bedienen substring: txt.substring(init + 1, fin)

    – Ry-

    21. August 2012 um 16:42 Uhr

  • Nichtsdestotrotz ist es eine nicht zu unterschätzende Option, nicht auf Regex umzusteigen.

    – Michael Krelin – Hacker

    21. August 2012 um 16:44 Uhr

  • @MichaelKrelin-hacker: Verstanden, aber selbst Ihre Regex-Methode liefert nicht das richtige Ergebnis, wenn die Zeichenfolge in etwa so ist A ( soll beginnen und es dann beenden, wie (my).

    – SexyBeast

    21. August 2012 um 16:47 Uhr

  • Exakt. Geschwindigkeit ist hier vielleicht kein Problem, aber im Allgemeinen sind Regex-Übereinstimmungen zeitaufwändig.

    – SexyBeast

    21. August 2012 um 16:48 Uhr


  • @Cupidvogel, in diesem Fall ist die Frage, was genau das OP in diesem Fall will. Es ist mir nicht klar, ob das Ergebnis, das meine Regex geben wird, falsch ist. Sie können es ändern in [^()] natürlich, aber ob das stimmt ist auch nicht klar. Und ja, nicht nur Leistung, sondern es geht einfach um die beliebte Tendenz dazu alles mit Regex würde ich Ihre Antwort positiv bewerten, wenn Sie einige Überprüfungen hinzufügen 😉

    – Michael Krelin – Hacker

    21. August 2012 um 16:52 Uhr

Für alle, die mehrere Texte in mehreren Klammern zurückgeben möchten

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

Verwenden Sie dies, um Text zwischen den nächsten zu erhalten ( und ):

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) }) )

Ergebnisse: my und ["my","text"].

ERLÄUTERUNG

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

  • Schöner Einzeiler, ich benutze das

    – Benutzer1503606

    1. Juni um 9:54

Benutzeravatar von Usman Shah
Usman Shah

um Felder aus einer Zeichenfolgenformel zu erhalten.

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

  • Schöner Einzeiler, ich benutze das

    – Benutzer1503606

    1. Juni um 9:54

Rons Benutzeravatar
Ron

um mehrere Elemente in runden Klammern zurückzugeben

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

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

1404230cookie-checkHolen Sie sich Text zwischen zwei runden Klammern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy