2010-03-04 55 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