Regulärer Ausdruck, um eine Zeichenfolge zwischen Klammern in Javascript zu erhalten
Lesezeit: 4 Minuten
Okay
Ich versuche, einen regulären Ausdruck zu schreiben, der eine Zeichenfolge zurückgibt, die zwischen Klammern steht. Zum Beispiel: Ich möchte die Zeichenfolge erhalten, die sich zwischen den Zeichenfolgen “(” und “)” befindet.
I expect five hundred dollars ($500).
würden zurückkehren
$500
Regulären Ausdruck gefunden, um eine Zeichenfolge zwischen zwei Zeichenfolgen in Javascript zu erhalten
Aber ich bin neu mit Regex. Ich weiß nicht, wie man ‘(‘, ‘)’ in Regexp verwendet
mögliches Duplikat des regulären Ausdrucks, um eine Zeichenfolge zu finden, die zwischen zwei Zeichen eingeschlossen ist, während die Trennzeichen AUSGESCHLOSSEN werden
– Ro Yo Mi
22. Juli 2013 um 4:27 Uhr
Sie können die folgende Lösung von go-oleg verwenden, die leicht modifiziert wurde, um das Dollarzeichen zu testen: var regExp = /\(\$([^)]+)\)/;
– Domtag
22. Juli 2013 um 4:44 Uhr
Wäre schön zu sehen, was du bisher probiert hast.
– Scipion
3. September 2020 um 9:22 Uhr
go-oleg
Sie müssen eine Reihe von entkommenen (with \) Klammern (die mit den Klammern übereinstimmen) und eine Gruppe regulärer Klammern, die Ihre Erfassungsgruppe erstellen:
var regExp = /\(([^)]+)\)/;
var matches = regExp.exec("I expect five hundred dollars ($500).");
//matches[1] contains the value between the parentheses
console.log(matches[1]);
Nervenzusammenbruch:
\( : Entspricht einer öffnenden Klammer
( : Fanggruppe beginnen
[^)]+: Übereinstimmung mit einem oder mehreren non ) Zeichen
+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.
– Praveen
26. September 2013 um 6:59 Uhr
Dies funktioniert nicht, wenn innerhalb der Klammern, die Sie erfassen möchten, Klammern vorhanden sind. Zum Beispiel: „Ich erwarte fünfhundert Dollar (500 Dollar (aber ich weiß, dass ich dieses Geld nie wieder sehen werde)).“
– JayB
11. Mai 2015 um 15:57 Uhr
Diese Regex funktioniert nur, wenn sie mit einer Instanz pro Stich übereinstimmt. Nutzung des Globalen /g Flag funktioniert nicht wie erwartet.
– SilkAdmin
26. Dezember 2015 um 4:01 Uhr
@IanWarburton, Streichhölzer[0] gibt Ihnen die vollständige Zeichenkette, die mit ‘($500)’ übereinstimmt, während Übereinstimmungen[1] gibt Ihnen genau das, was in der Erfassungsgruppe ist. Hier sind einige weitere Informationen zum Rückgabewert von regExp.match(). developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
– sbru
9. September 2016 um 16:15 Uhr
Was ist die Lösung, wenn Sie mehrere Zeichenfolgen wie unten in Klammern haben: „Ich erwarte (fünf)hundert Dollar (500 $)“ Sagen wir, ich möchte ein Array dieser speziellen Zeichenfolgen.
– Mohamad Al Asmar
4. Januar 2018 um 15:11 Uhr
Herr Green
Versuchen Sie die String-Manipulation:
var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var newTxt = txt.split('(');
for (var i = 1; i < newTxt.length; i++) {
console.log(newTxt[i].split(')')[0]);
}
var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var regExp = /\(([^)]+)\)/g;
var matches = txt.match(regExp);
for (var i = 0; i < matches.length; i++) {
var str = matches[i];
console.log(str.substring(1, str.length - 1));
}
Wenn Sie diesen jsperf heute in Chrome 59.0.3071 ausführen, war die Regex um 8 % schneller
– Alex McMillan
27. Juli 2017 um 22:50 Uhr
Ali Soltani
Einfache Lösung
Notiz: Diese Lösung kann für Zeichenfolgen verwendet werden, die nur einzelne “(” und “)” wie die Zeichenfolge in dieser Frage enthalten.
("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();
([^()]*) – Fanggruppe 1: a negierte Zeichenklasse Übereinstimmung mit 0 oder mehr Zeichen außer ( und )
\) – ein ) verkohlen.
Um die gesamte Übereinstimmung zu erhalten, greifen Sie den Wert der Gruppe 0, wenn Sie den Text in Klammern benötigen, greifen Sie den Wert der Gruppe 1.
Die aktuellste JavaScript-Code-Demo (mit matchAll):
const strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
const rx = /\(([^()]*)\)/g;
strs.forEach(x => {
const matches = [...x.matchAll(rx)];
console.log( Array.from(matches, m => m[0]) ); // All full match values
console.log( Array.from(matches, m => m[1]) ); // All Group 1 values
});
Legacy-JavaScript-Code-Demo (ES5-konform):
var strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
var rx = /\(([^()]*)\)/g;
for (var i=0;i<strs.length;i++) {
console.log(strs[i]);
// Grab Group 1 values:
var res=[], m;
while(m=rx.exec(strs[i])) {
res.push(m[1]);
}
console.log("Group 1: ", res);
// Grab whole values
console.log("Whole matches: ", strs[i].match(rx));
}
silkAdmin
Die Antwort von Mr_Green wurde auf einen funktionalen Programmierstil portiert, um die Verwendung temporärer globaler Variablen zu vermeiden.
mögliches Duplikat des regulären Ausdrucks, um eine Zeichenfolge zu finden, die zwischen zwei Zeichen eingeschlossen ist, während die Trennzeichen AUSGESCHLOSSEN werden
– Ro Yo Mi
22. Juli 2013 um 4:27 Uhr
Sie können die folgende Lösung von go-oleg verwenden, die leicht modifiziert wurde, um das Dollarzeichen zu testen:
var regExp = /\(\$([^)]+)\)/;
– Domtag
22. Juli 2013 um 4:44 Uhr
Wäre schön zu sehen, was du bisher probiert hast.
– Scipion
3. September 2020 um 9:22 Uhr