2009-08-26 24 views
1

Ich versuche ein Feld aus einer Zeichenfolge zu ziehen und es zurückzugeben.Was ist los mit meinem ActionScript Regex?

Meine Funktion:

public function getSubtype(ut:String):String { 
      var pattern:RegExp = new RegExp("X=(\w+)","i"); 
      var nut:String = ut.replace(pattern, "$1"); 
      trace("nut is " + nut); 
      return nut; 
     } 

ich die Zeichenfolge bin vorbei:

http://foo.bar.com/cgi-bin/ds.pl?type=boom&X=country&Y=day&Z=5 

die Trace-Anweisungen gibt die obige Zeichenfolge mit aus Modifikation.

Ich habe das Muster auf Ryan Swanson Flex 3 Regular Expression Explorer ausprobiert und es gibt: X = Land. Mein Wunschergebnis ist "Land".

Muss offensichtlich sein, aber ich kann es nicht sehen. Jede Hilfe wird geschätzt.

TB

änderte meine Funktion auf die folgende und es funktioniert:

public function getSubtype2(ut:String):String { 
      trace("searching " + ut); 
      var pattern:RegExp = new RegExp("X=([a-z]+)"); 
      var r:Object = pattern.exec(ut); 
      trace("result is " + r[1]); 
      return r[1].toString(); 

Interessanterweise aber nicht mit X = (\ w +) nicht überein, und einen Fehler verursacht. ???? }

+0

Ja, das ist ein besserer Weg. Und wenn AS wie Java ist, müssen Sie versuchen: new RegEx ("X = (\\ w +)", "i"); – PhiLho

+0

Obwohl die Adobe-Dokumentation \ w + als Beispiel verwendet. – Todd

+1

In einem * Regex-Literal * verwenden Sie einen umgekehrten Schrägstrich: '/ X = (\ w +) /'. Sie schreiben es als * string * literal, um es an den RegExp-Konstruktor zu übergeben: 'new RegExp (" X = (\\ w +) ")'; deshalb müssen Sie zwei Backslashes verwenden. ref: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/RegExp.html –

Antwort

1

Die Ersetzungsmethode wird zum Ersetzen verwendet. Das ist, wenn Sie die angegebene Zeichenfolge ändern möchten. Das Ersetzen eines gegebenen Teils durch sein eigenes Auftreten erzeugt die gleiche Zeichenkette. Ich denke, Sie suchen nach der Match-Methode, die ein Array von Übereinstimmungen erzeugt, siehe unten.

function getSubtype(ut:String):String { 
      var pattern:RegExp = new RegExp("X=([a-z]+)","i"); 
      var nut:Array = ut.match(pattern); 
      trace("nut is " + nut[1]); 
      return nut[1]; 
} 

Mutter [0] beeing die volle einstimmenden Zeichenkette, gefolgt durch eine Mutter [1] die erste Konsolen-Gruppe und so weiter.

+0

Damit Ihr erstes Muster mit \ w funktioniert, wenn Sie es zwischen Anführungszeichen schreiben, müssen Sie das \ char-Zeichen entschlüsseln. Ansonsten würde es nur funktionieren, wenn es wie folgt geschrieben würde: var pattern: RegExp =/X = (\ w +) /; – Virusescu

+0

Vielen Dank! All die Falten zum Erlernen einer neuen Sprache :-) – Todd

0

Hinweis: Ich weiß nicht, Actionscript ...

Ihr RE Explorer das abgestimmte Muster zurückzukehren scheint, ob es eine Möglichkeit, die Aufnahmen als auch zu sehen ist.

Und wenn sich AS wie die meisten Sprachen, die ich kenne, verhält, ersetzt Ihr replace() - Aufruf X=country durch country.

1

Die Methode replace mutiert die Zeichenfolge nicht, auf der sie ausgeführt wird, sie gibt eine neue Zeichenfolge zurück. Versuchen: -

var nut:String = ut.replace(pattern, "$1"); 
+0

Probieren Sie einfach Ihren Vorschlag. Leider immer noch das gleiche Ergebnis. – Todd

0

Statt

var pattern:RegExp = new RegExp("X=(\w+)","i"); 

du schreiben:

var pattern:RegExp = /X=(\w+)/i; 

Dann werden Sie keine Probleme mit Schrägstriche haben.

+0

Danke. Ich schätze die Hilfe. – Todd