2010-03-04 56 views
0

我有一個類似於路徑的字符串,但我嘗試了一些應該解析路徑的正則表達式模式,但它們並不工作。在Actionscript中使用RegExp進行字符串解析

這裏的字符串

f|MyApparel/Templates/Events/

我需要的斜槓之間的 「名稱部分」。

我試過(\w+)但是陣列回來了[0] = "f"[1] = "f"

我測試了http://www.gskinner.com/RegExr/的模式,它似乎工作正常。

這裏的AS代碼:

var pattern : RegExp = /(\w+)/g; 
var hierarchy : Array = pattern.exec(params.category_id); 
params.name = hierarchy.pop() as String; 
+0

謝謝@mmyers。校對不好。 – spdaly 2010-03-04 16:09:42

回答

2

pattern.exec()像JavaScript一樣工作。它每次找到全局正則表達式匹配時都會重置lastIndex屬性,並且下次運行它時會從此處開始。

所以它不返回所有匹配的數組,但只返回字符串中的下一個匹配。因此,您必須在循環中運行它直到它返回null

var myPattern:RegExp = /(\w+)/g; 
var str:String = "f|MyApparel/Templates/Events/"; 

var result:Object = myPattern.exec(str); 
while (result != null) { 
    trace(result.index, "\t", result); 
    result = myPattern.exec(str); 
} 
+0

+1 - 糾正不得不循環。但是,我會補充說,使用split代替RegExp可以更好地解決此問題。 – sberry 2010-03-04 16:28:27

+0

對於這個特定的問題,同意。其他類似的問題可能不會像split()那樣容易解決。問題中的一般誤解是關於'pattern.exec()'是如何工作的,而這正是我想要糾正的。 – Tomalak 2010-03-04 16:37:30

1

我不知道這之間的兩個斜線你想,但嘗試

var hierarchy : Array = params.category_id.split(/[\/|]/); 

[\/|]指斜線或豎線。

+0

+1。儘管@Tomalak回答了關於使用RegExp的OP問題,但我認爲這是一個更好的解決方案,並且實際上仍然使用RegExp。 :) – sberry 2010-03-04 16:29:19