2016-04-20 13 views

Antwort

1

Es gibt mehrere Möglichkeiten, dies zu tun, aber ich denke, die einfachste zwei reguläre Ausdrücke ist: eine, um den Inhalt zwischen ] und [ und eine andere, um die Klammern und Leerzeichen zu entfernen:

var str = "[Total MM]/[Total-MD] - [Total-MC]"; 
str 
    .match(/\].*?\[/g) 
    .map(m => m.replace(/\]\s*|\s*\[/g, '')); 

Hier ist ein CodePen with a live demo.

+0

danke @Ethan Brown so sehr. es ist für mich. –

+0

Ich bin froh, dass ich helfen konnte! –

+0

Hi Ethan, ich sehe in deiner Antwort Syntax '=>', es sieht aus wie in LinQ in C#. Es ist gleich? –

2

Versuchen Sie, diese

\]\s*([^[]+?)\s*\[ 

Regex demo

var re = /\]\s*([^[]+?)\s*\[/g; 
var str = '[Total MM]/[Total-MD] - [Total-MC]'; 
var m; 

while ((m = re.exec(str)) !== null) { 
    if (m.index === re.lastIndex) { 
     re.lastIndex++; 
    } 
    // View your result using the m-variable. 
    // eg m[0] etc. 
} 
+0

danke @ Tim007, Ihre Antwort gut aussehen, aber vergessen Sie zwei Zeichen entfernen "" ["' und '"] "' –

+0

@ Võ Minh Phong es ist in erfasste Werte, nicht übereinstimmende Werte –

+0

Wie verhält sich das, wenn die Zeichenfolge beginnt nicht mit einem eingeklammerten Ausdruck? –

1

Erstellen Sie eine Regexp, die übereinstimmt, was IS in den Klammern ist, aber es nicht erfasst; dann eine Alternative, um alles andere zu erfassen.

/\[.*?\]|([^[]*)/g 
^^^^^^^    MATCH STUFF IN BRACKETS, DO NOT CAPTURE 
      ^^^^^^  MATCH ANYTHING ELSE, DO CAPTURE 

Siehe https://regex101.com/r/oQ8pB2/1. Siehe "Match Information" auf der rechten Seite.

Verwandte Themen