2017-07-01 1 views
0

Ich möchte den Array-Schlüssel aus einer Zeichenfolge erfassen.Wie kann ich Word von Regex erfassen

Hier sind meine Worte: message[0][generic][0][elements][0][default_action][url]...

ich die Array-Schlüssel nach message[0][generic][0][elements][0], und die erwarteten Ergebnisse sind default_action und url usw.

Ich habe versucht, folgende Muster aber nicht funktionieren erfassen möchten.

  1. message\[0\]\[generic\]\[0\]\[elements\]\[0\](?=\[(\w+)\]): erfasst nur default_action;
  2. \[(\w+)\]: Es erfasst alle Array-Schlüssel, sondern umfasst 0, generic, elements ...

Gibt es eine RegexMuster für JavaScript, die das Ergebnis Array inverse machen, wie [url, default_action]?

Antwort

0

eine beliebige Anzahl von Tasten zu extrahieren und die Reihenfolge der Elemente in resultierende Array Reverse:

str = "message[0][generic][0][elements][0][default_action][url]"; 
 
res = str.match(/\[([^\d\]]+)\](?=\[[^\d\]]*\]|$)/g) 
 
    .map(function(s) { return s.replace(/[\[\]]/g, "") }) 
 
    .reverse(); 
 
console.log(res);

+1

Danke! Es funktioniert für meinen Fall! –

0

Die Lösung mit String.prototype.split() und Array.prototype.slice() Funktionen:

var s = 'message[0][generic][0][elements][0][default_action][url]...', 
 
    result = s.split(/\]\[|[\[\]]/g).slice(-3,-1); 
 
    
 
console.log(result);

+0

Sie ist nicht erfolgreich, wenn es mehr ist als 2 adding keys.It nur die letzten zwei Schlüssel –

+0

@ JanCiołek, sagte der OP nicht, dass t hier könnten * mehr als 2 additional keys * – RomanPerekhrest

+0

ich denke, er tat es, vielleicht nicht speziell aber immer noch.
'message [0] [generic] [0] [elements] [0] [default_action] [url] ...' diese Punkte bedeuten etwas, aber ich kann falsch liegen, egal, guter Job! –

1

Sie unerwünschte Teil einer Zeichenfolge ersetzen kann, und dann alle anderen Tasten bekommen.

var string = 'message[0][generic][0][elements][0][default_action][url][imthird]'; 
 

 
var regexp = /message\[0\]\[generic\]\[0\]\[elements\]\[0\]/ 
 

 
var answer = string.replace(regexp,'').match(/[^\[\]]+/g) 
 

 
console.log(answer);

+0

Danke! Es klappt! –

Verwandte Themen