如何使用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
答案 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