Actionscript RegExp一次调用中所有匹配项的位置和长度

时间:2012-05-04 08:32:13

标签: regex actionscript-3 flex actionscript position

如何使用actionscript中的正则表达式在一次调用中找到文本中某些单词的所有位置。

在示例中,我有这个正则表达式:

var wordsRegExp:RegExp = /[^a-zA-Z0-9]?(include|exclude)[^a-zA-Z0-9]?/g;

并在文本中找到“include”和“exclude”字样。

我正在使用

var match:Array;
match = wordsRegExp.exec(text)

找到单词,但首先找到第一个单词。我需要找到所有单词“include”和“exclude”以及那里的位置,所以我这样做:

    var res:Array = new Array();
    var match:Array;
    while (match = wordsRegExp.exec(text)) {
        res[res.length]=match;
    }

这就是诀窍,但对于大量文本来说非常慢。我正在寻找其他方法而没有找到它。

请提前帮助和谢谢。

EDIT: I tried var arr:Array = text.match(wordsRegExp);
it finds all words, but not there positions in string

2 个答案:

答案 0 :(得分:2)

我认为这就是野兽的本质。我不知道你对“大量文本”的意思,但如果你想要更好的性能,你应该编写自己的解析函数。这不应该那么复杂,因为你的搜索表达式非常简单。

我从未比较String搜索功能和RegExp的效果,因为我认为基于相同的实现。如果String.match()更快,那么您应该尝试String.search()。使用索引,您可以计算下一次搜索迭代的子字符串。

答案 1 :(得分:-2)

help.adobe.com 网站上找到了这个...

<强> "Methods for using regular expressions with strings: The exec() method"

...该数组还包含一个index属性,表示子字符串匹配开始的索引位置......

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

while (result != null) 
{ 
    trace(result.index, "\t", pattern.lastIndex, "\t", result); 
result = pattern.exec(str); 
} 
//output:  
// 0      3      She 
// 10      19      seashells 
// 27      35      seashore