正则表达式未找到所有匹配项

4
我有以下代码(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”。我真的不明白为什么会这样,因为在我的正则表达式测试应用程序“RegExhibit”中,它返回“#asd,#hash1,#hash2”,这是我所期望的。请问有人能解释一下吗?
提前致谢!
1个回答

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

如果模式是一个正则表达式,则需要在正则表达式中设置 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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接