我有以下代码(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',这是我所期望的。有人可以对此有所了解吗?
提前致谢!
答案 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);