RegEx找不到所有匹配项

时间:2011-12-23 11:36:29

标签: regex actionscript-3

我有以下代码(AS3和CS 5.5):

var regEx:RegExp = new RegExp(/(?:^|\s)(\#[^\s$]+)/g);
var txt:String = "This #asd is a test tweet #hash1 test #hash2 test";

var matches:Object = regEx.exec(txt);
trace(matches);

跟踪返回'#asd,#asd'。我真的不明白为什么会这样,因为在我的RegEx测试应用程序'RegExhibit'中它返回'#asd,#hash1,#hash2',这是我所期望的。有人可以对此有所了解吗?

提前致谢!

1 个答案:

答案 0 :(得分:6)

如果您使用.exec,则应多次运行以获得所有结果:

  

在下面的示例中,g(全局)标志在正则表达式中设置,因此您可以重复使用exec()来查找多个匹配项:

var myPattern:RegExp = /(\w*)sh(\w*)/ig;  
var str:String = "She sells seashells by the seashore";
var result:Object = myPattern.exec(str);

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

来源:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/RegExp.html

更好的选择可能是使用String.match

  

如果pattern是正则表达式,为了返回具有多个匹配子字符串的数组,必须在正则表达式中设置g(全局)标志

一个例子应该是(未经测试):

var regEx:RegExp = /(?:^|\s)(\#[^\s$]+)/g;
var txt:String = "This #asd is a test tweet #hash1 test #hash2 test";

var matches:Object = txt.match(regEx);