Leider vergesse ich immer, obwohl ich versucht habe, Regex mindestens einmal im Jahr so viele Jahre lang zu lernen, wie ich mich erinnern kann, weil ich sie so selten benutze. In diesem Jahr ist mein Vorsatz für das neue Jahr, nicht noch einmal zu versuchen, Regex zu lernen. Um mich dieses Jahr vor Tränen zu bewahren, werde ich es Stack Overflow geben . (Letzter Weihnachts-Remix).
Ich möchte eine Zeichenfolge in diesem Format übergeben {getThis}
und die Zeichenfolge zurückgeben getThis
. Könnte jemand helfen, an meiner Neujahrsresolution festzuhalten?
Verwandte Fragen zum Stapelüberlauf:
javascript
regex
ChrisInCambo
quelle
quelle
Antworten:
Wenn Ihre Zeichenfolge immer dieses Format hat, ist ein regulärer Ausdruck übertrieben:
substring(1
bedeutet, ein Zeichen in (kurz nach dem ersten{
) zu beginnen und,g.length-1)
Zeichen zu nehmen, bis das Zeichen die Zeichenfolgenlänge minus eins erreicht (aber nicht einschließt). Dies funktioniert, weil die Position auf Null basiert, dhg.length-1
die letzte Position ist.Für andere Leser als das Originalposter: Wenn es sich um eine Regex handeln muss, verwenden
/{([^}]*)}/
Sie diese Option, wenn Sie leere Zeichenfolgen zulassen möchten oder/{([^}]+)}/
wenn Sie nur dann übereinstimmen möchten, wenn sich zwischen den geschweiften Klammern mindestens ein Zeichen befindet. Nervenzusammenbruch:/
: Starten Sie das Regex-Muster{
: eine buchstäblich geschweifte Klammer(
: Starten Sie die Aufnahme[
: Definieren Sie eine Klasse von Zeichen, die erfasst werden sollen^}
: "alles andere als}
"]
: OK, das ist unsere gesamte Klassendefinition*
: eine beliebige Anzahl von Zeichen, die der gerade definierten Klasse entsprechen)
: aufgenommen}
: Eine buchstäblich geschweifte Klammer muss sofort dem folgen, was wir aufgenommen haben/
: Beenden Sie das Regex-Musterquelle
Versuchen
Das heißt, passen Sie ein beliebiges Zeichen zwischen {und} an, aber seien Sie nicht gierig - passen Sie die kürzeste Zeichenfolge an, die mit} endet (das? Stoppt * ist gierig). Mit den Klammern können Sie den übereinstimmenden Teil extrahieren.
Ein anderer Weg wäre
Dies entspricht jedem Zeichen außer einem} char (eine andere Art, nicht gierig zu sein)
quelle
g
am Ende macht es zu einer globalen Suche. Sehen Sie ein Arbeitsbeispielquelle
Versuche dies:
Beispielsweise
wird zurückkehren
gskinner.com
,ssd.sd
.quelle
\}
im ersten Block verwenden?}
passt zu jeder Gruppe, die mit endet , auch wenn es nicht mit beginnt{
.Hier ist eine einfache Lösung mit Javascript ersetzen
Wie die oben akzeptierte Antwort zeigt, lässt sich das ursprüngliche Problem leicht mit Teilzeichenfolgen lösen, aber die Verwendung von Ersetzen kann die komplizierteren Anwendungsfälle lösen
Wenn Sie eine Zeichenfolge wie "randomstring999 [Feldname]" haben, verwenden Sie ein etwas anderes Muster, um den Feldnamen abzurufen
quelle
Dieser funktioniert in Textmate und passt alles in einer CSS-Datei zwischen den geschweiften Klammern an.
selector {. . matches here including white space. . .}
Wenn Sie den Inhalt weiter zurückgeben möchten, schließen Sie alles wie folgt in einen weiteren Satz Klammern ein:
und Sie können über $ 1 auf den Inhalt zugreifen.
Dies funktioniert auch für Funktionen, aber ich habe es nicht mit verschachtelten geschweiften Klammern getestet.
quelle
Sie möchten Regex Lookahead und Lookbehind verwenden. Dies gibt Ihnen nur das, was sich in den geschweiften Klammern befindet:
quelle
Versuche dies
quelle
Regex zum Abrufen von String-Arrays mit eingeschlossenen geschweiften Klammern tritt in String auf, anstatt nur das erste Vorkommen zu finden.
quelle
Ich habe mir die anderen Antworten angesehen, und eine wichtige Logik scheint in ihnen zu fehlen. Wählen Sie also alles zwischen zwei CONSECUTIVE-Klammern aus, aber NICHT die Klammern
Also, hier ist meine Antwort
quelle
Der einfachere gibt
.replace(/.*{(.*)}.*/, '$1')
leider die gesamte Zeichenfolge zurück, wenn der reguläre Ausdruck nicht übereinstimmt. Das obige Codefragment kann eine Übereinstimmung leichter erkennen.quelle
Versuchen Sie dieses, laut http://www.regextester.com funktioniert es für js normal.
([^{]*?)(?=\})
quelle
/([^{]*?)\w(?=\})/gmi
Sie können diese Regex-Rekursion verwenden, um alles dazwischen abzugleichen, sogar eine andere
{}
(wie ein JSON-Text):quelle
Auch das hilft mir beim Versuch, jemandes Problem zu lösen.
Beispielsweise:
Ausgabe:
quelle