2012-03-28 18 views
3

Ich habe die Zeichenfolge SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10]) und ich brauche die Elemente [A2:A10],[B2:B10],[C2:C10],[D2:D10] in einem Array, so dass ich match() in js verwendet. Das Code-Snippet istRegulärer Ausdruck Spiel in Javascript

var formula = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])"; 
var reg = /\[(a-zA-Z0-9)+\]/; 
matches = formula.match(reg); 

Aber ich bekomme das Spiel nicht. Ich hoffe, der reguläre Ausdruck ist falsch. Ich bin sehr arm darin, regelmäßigen Ausdruck zu bauen. Was wird der richtige reguläre Ausdruck sein?

+0

Danke noch ein Code, jfriend00, ZER0, Diode, Anony-Mousse und Joseph !!! –

Antwort

10

es so versuchen:

var formula = 'SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])'; 
var reg = /\[\w+:\w+\]/g; 
matches = formula.match(reg); 

Ausgang:

["[A2:A10]", "[B2:B10]", "[C2:C10]", "[D2:D10]"] 

Ihre regex in die richtige Richtung, aber nicht den Doppelpunkt und erfasst einzelne Zeichen beinhalten. Die \w Escape-Sequenz, die ich verwendete, ist eine Abkürzung für ein Wortzeichen ([a-zA-Z0-9_]), macht es lesbarer. Das Flag g ist erforderlich, um alle Übereinstimmungen statt nur die erste zu erhalten.

+0

+1 für die Einführung von '\ w' zu mir – tusar

1

Ihre Regexp enthält nicht den Doppelpunkt :.

Versuchen Sie dies: /\[([0-9A-Z:]+)\]/, insbesondere, warum ich dort eckige Klammern zitiert und nicht zitiert habe.

Außerdem wird Ihre Eingabezeichenfolge nicht angegeben.

2
var formula = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])"; 
var reg = /\[.*?\]/g; 
matches = formula.match(reg); 
+0

kannst du die Regex /\[.*?\]/g erklären !! –

+0

@JaisonJustus: '. *' Bedeutet im Grunde genommen "alles abgleichen", und das '?' Direkt nachdem der Quantor faul gemacht wurde, stimmt also nicht mit dem Rest der Eingabe überein, sondern nur bis zum nächsten ']' . –

+0

\\ [- Muster beginnt mit [, \\] - Muster endet mit],. - Übereinstimmung mit einem beliebigen Zeichen, * - null oder mehr,? - passt zu jedem Block von [] – Diode

1

Ich glaube, Sie haben die Zitate vergessen. Auch was Sie brauchen, ist auch die globale Flagge. Hier ist der Code:

var formula = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])"; 
var reg = /\[[0-z]+:[0-z]+\]/g; 
var matches = formula.match(reg); 
2
var str = "SUM([A2:A10],[B2:B10],[C2:C10],[D2:D10])"; 

var matches = str.match(/\[[A-Z0-9:]+\]/g); 
alert(matches);​ 

Hinweis, verwenden Sie die g Flagge auf der Regex alle Spiele zu bekommen.

Sie können es hier arbeiten sehen: http://jsfiddle.net/jfriend00/aTrLU/

+0

+1, wie es einfacher ist als mein Ausdruck –

2

Die Regex Sie brauchen, ist

/\[[A-Z][0-9]+:[A-Z][0-9]+\]/gi 

Der g-Modifikator zeigt an, dass wir ein globales mtching tun sollten, und alle Ergebnisse zurück, nicht nur die erste

Der i-Modifikator gibt an, dass wir einen Groß- und Kleinschreibung passende

eine Annahme benötigen wird, dass Sie nicht in wollen clude [E2: E10:], wegen extra Semikolon

+0

nice one .. genauer gesagt. Danke –