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
Gefunden regulärer Ausdruck, um eine Zeichenfolge zwischen zwei Zeichenfolgen in Javascript zu erhalten
Aber ich bin neu mit Regex. Ich weiß nicht, wie '(', ')' in Regex verwendet wird
Sie müssen einen Satz von geschweiften (mit \
) Klammern (die mit den Klammern übereinstimmen) und eine Gruppe von regulären Klammern erstellen, 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:
\(
: passt auf eine öffnende Klammer(
: Beginnen Sie mit der Erfassung der Gruppe[^)]+
: Entspricht einem oder mehreren Nicht-)
-Zeichen)
: Erfassungsgruppe beenden\)
: Schließen Sie die Klammern abHier ist eine visuelle Erklärung zu RegExplained
Probieren Sie die String-Manipulation aus:
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]);
}
oder Regex (was etwas langsamer Vergleich mit dem obigen)
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));
}
Portierte Antwort von Mr_Green auf einen funktionalen Programmierstil, um die Verwendung temporärer globaler Variablen zu vermeiden.
var matches = string2.split('[')
.filter(function(v){ return v.indexOf(']') > -1})
.map( function(value) {
return value.split(']')[0]
})
Einfache Lösung
Notice: Diese Lösung wird für einen String verwendet, der nur einen "(" und ")" - String enthält.
("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();
Nur für Ziffern hinter einem Währungszeichen: \(.+\s*\d+\s*\)
sollte funktionieren
Oder \(.+\)
für irgendetwas in Klammern
Um einen Teilstring innerhalb von Klammern abzugleichen, ausgenommen alle inneren Klammern, die Sie verwenden können
\(([^()]*)\)
muster. Siehe die regex-Demo .
In JavaScript verwenden Sie es gerne
var rx = /\(([^()]*)\)/g;
Musterdetails
\(
- ein (
-Zeichen([^()]*)
- Erfassungsgruppe 1: eine negierte Zeichenklasse , die mit 0 oder mehr Zeichen außer (
und )
übereinstimmt\)
- ein )
-Zeichen.Um die gesamte Übereinstimmung zu erhalten, greifen Sie zum Wert der Gruppe 0. Wenn Sie den Text in Klammern benötigen, greifen Sie zum Wert der Gruppe 1:
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));
}
var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/;
alert(rex.exec(str));
Stimmt mit der ersten Zahl überein, die mit einem $ beginnt und gefolgt von ')'. ')' wird nicht Teil des Spiels sein. Der Code warnt bei der ersten Übereinstimmung.
var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/g;
var matches = str.match(rex);
for (var i = 0; i < matches.length; i++)
{
alert(matches[i]);
}
Dieser Code weist auf alle Übereinstimmungen hin.
Verweise:
suche nach "? = n" http://www.w3schools.com/jsref/jsref_obj_regexp.asp
suche nach "x (? = y)" https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/RegExp