it-swarm.com.de

Regulärer Ausdruck, um eine Zeichenfolge zwischen Klammern in Javascript zu erhalten

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

135
Okky

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 ab

Hier ist eine visuelle Erklärung zu RegExplained

376
go-oleg

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));
}
26
Mr_Green

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

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();

Online Demo (jsfiddle)

3
Ali Soltani

Nur für Ziffern hinter einem Währungszeichen: \(.+\s*\d+\s*\) sollte funktionieren

Oder \(.+\) für irgendetwas in Klammern

3
P0W

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

2
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

0
AJ Dhaliwal