0

在 Actionscript 和 Adob​​e Flex 中,我将模式和正则表达式(带有全局标志)与 string.match 方法一起使用,它可以按照我想要的方式工作,除非匹配返回文本中相同单词的多次出现。在这种情况下,该单词的所有匹配项仅指向该单词第一次出现的索引。例如,如果文本是“cat dog cat cat cow”并且模式是搜索 cat*,则 match 方法返回一个包含三个“cat”的数组,但是,它们都只指向第一个的索引当我在通过数组的循环上使用 indexOf 时发生 cat 。我假设这就是 string.match 方法的样子(尽管如果我做错了什么或遗漏了什么,请告诉我!)。我想找到每次匹配的具体索引,

我想知道 string.match 方法是否就是这样,如果是这样,是否有人知道最好的方法是什么。谢谢。

4

1 回答 1

2

问题不在于match方法,而在于indexOf方法

function indexOf(val:String, startIndex:Number  = 0):int

搜索字符串并返回调用字符串中第一次出现valfound at 或 after的位置。startIndex

您必须以indexOf适当的方式调用startIndex- 换句话说,您必须从上一场比赛的结尾开始搜索。

var s:String = "cats dog cat cats cow cat";
var matches:Array = s.match(/cats?/g);
trace(matches.join());// ["cats", "cat", "cats", "cat"]
var k:Number = 0;
for(var i:Number = 0; i < matches.length; i++)
{
    k = s.indexOf(matches[i], k);
    trace("match #" + i + " is at " + k);
    k += matches[i].length;
}

您也可以使用以下regex.exec方法执行此操作:

var s:String = "cats dog cat cats cow cat";
var r:RegExp = /cats?/g;
var match:Object;
while((match = r.exec(s)) != null)
{
  trace("Match at " + match.index + "\n" +
    "Matched substring is " + match[0]);
}
于 2010-05-25T04:43:36.683 回答