2009-08-26 54 views
1

我想從字符串中拉出一個字段並將其返回。我的ActionScript Regex有什麼問題?

我的功能:

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; 
     } 

我傳遞給它的字符串:

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

跟蹤語句返回上面的字符串進行修改。

我試過Ryan Swanson的Flex 3 Regular Expresion Explorer中的模式,它返回:X = country。我希望結果是「國家」。

必須顯而易見,但我看不到它。任何幫助將不勝感激。

TB

改變了我的功能,下面和它的作品:

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(); 

有趣的是,雖然使用X =(\ w +)不匹配而導致錯誤。 ???? }

+0

是的,這是一個更好的方法。如果AS和Java一樣,則必須嘗試:新的RegEx(「X =(\\ w +)」,「i」); – PhiLho

+0

儘管adobe文檔使用\ w +作爲示例。 – Todd

+1

在* regex文字*中使用一個反斜槓:'/ X =(\ w +)/'。你把它寫成一個*字符串*文字將它傳遞給RegExp構造函數:'new RegExp(「X =(\\ w +)」)';這就是爲什麼你必須使用兩個反斜槓。 ref:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/RegExp.html –

回答

1

替換方法用於替換。那就是如果你想修改給定的字符串。用他自己的事件替換給定的部分會產生相同的字符串。 我想你正在尋找匹配方法,它會產生一串匹配,見下文。

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]; 
} 

螺母[0] beeing充分匹配的字符串,然後螺母[1]的第一托架組等。

+0

另外,爲了讓你的第一個模式有\ w工作,如果你在引號之間編寫它,那麼你必須轉義\ char。否則,只有在寫入如 var pattern:RegExp =/X =(\ w +)/; – Virusescu

+0

非常感謝!學習新語言的所有皺紋:-) – Todd

0

注:我不知道的ActionScript ...

你的RE資源管理器似乎返回匹配的模式,看看是否有可能看到的捕捉也是如此。

如果AS的行爲與我所知道的大多數語言一樣,則您的replace()調用將X=country替換爲country

1

替換方法不改變它操作的字符串,它返回一個新的字符串。嘗試: -

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

剛剛嘗試過你的建議。不幸的是,結果仍然相同。 – Todd

0

而不是

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

你可以這樣寫:

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

這時你不會有反斜槓的問題。

+0

謝謝。我很感激幫助。 – Todd