2012-03-27 6 views
0

In Javascript muss ich den Text innerhalb der benutzerdefinierten Tag bekommen. Zum BeispielJavaScript regexp erhalten Sie ein Wort zwischen den Texten

[tag_ retweet attr = "val" attr2 = "val"]

In diesem Fall muss ich das Wort "retweet" alle anderen Texte und ein weiteres Beispiel nur erhalten Skipping

ist,

[tag_ Aktie]

Hier muss ich das Wort "teilen" bekommen.

Also, was wird die Regexp für diesen Tag-Namen in meinem Fall bekommen ??

Antwort

1

So etwas wie /\[tag_([a-z0-9_]+)(?:\s+|\])/

var tag = '[tag_retweet attr="val" attr2="val"]'; 
var match = tag.match(/\[tag_([a-z0-9_]+)(?:\s+|\])/); 
window.alert(match[1]);​ // alerts "retweet" 
1

Die Regex zu erfassen es sein würde:

/.*\[tag_(.*?)\W.*/

Das passt alle Zeichen bis zum Ende der [tag_ und beginnt dann alle caracters erfassen, bis sie einen Nicht-Wort-Zeichen trifft, dann alle anderen Zeichen . Das Spiel enthält nur die relevanten Teile.

Gebrauch mag es:

myString.match(/.*\[tag_(.*?)\W.*/)[1]

+1

brauchst du nicht das '?', Damit es nicht gierig wird? ... '/.* \ [tag _ (. *?) \ W. * /' (Regex nicht mein Ding though: /) – musefan

+0

Ziemlich wahrscheinlich - es wird zumindest nicht weh tun ... –

+0

Die '. * Vorher und Nachher sind unnötig ... –

1

Grundsätzlich Sie suchen, was nach [tag_ kommt, bis zum nächsten Raum (oder das Ende des Tags)

So:

var tag = '[tag_retweet attr="val" attr2="val"]'; 
// or var tag = '[tag_share]'; 
var match = tag.match(/\[tag_(.*?)[\] ]/)[1]; 
+0

Ich bekomme nur 'null' http://jsfiddle.net/vaakash/jf6Xe/ oder mache ich irgendwas falsch ?? –

+0

Anscheinend JS regexes verstehen nicht, dass ']' keine besondere Bedeutung hat, wenn es das erste Zeichen in einer Zeichenklasse ist. Siehe Bearbeiten. –