Regex 如何使用string.match方法在字符串中查找同一单词的多个匹配项?
在Actionscript和AdobeFlex中,我将模式和regexp(带有全局标志)与string.match方法一起使用,它的工作方式与我希望的不同,除非匹配返回文本中同一单词的多次出现。在这种情况下,该单词的所有匹配项仅指向该单词第一次出现的索引。例如,如果文本是“cat dog cat cow”,模式是对cat*的搜索,则match方法返回一个包含三个“cat”匹配项的数组,但是,当我在数组中的循环上使用indexOf时,它们都只指向cat第一个匹配项的索引。我假设string.match方法就是这样(尽管如果我做错了什么或遗漏了什么,请告诉我!)。我想找到匹配的每次出现的具体索引,即使它是先前已匹配的单词的索引Regex 如何使用string.match方法在字符串中查找同一单词的多个匹配项?,regex,actionscript-3,string,search,match,Regex,Actionscript 3,String,Search,Match,在Actionscript和AdobeFlex中,我将模式和regexp(带有全局标志)与string.match方法一起使用,它的工作方式与我希望的不同,除非匹配返回文本中同一单词的多次出现。在这种情况下,该单词的所有匹配项仅指向该单词第一次出现的索引。例如,如果文本是“cat dog cat cow”,模式是对cat*的搜索,则match方法返回一个包含三个“cat”匹配项的数组,但是,当我在数组中的循环上使用indexOf时,它们都只指向cat第一个匹配项的索引。我假设string.mat
我想知道string.match方法是否就是这样,如果是这样,是否有人知道最好的方法是什么。谢谢。问题不在于
匹配方法,而在于
搜索字符串并返回调用字符串中在startIndex
处或之后找到的val
的第一个匹配项的位置
您必须使用适当的startIndex
调用indexOf
——换句话说,您必须从上一个匹配的末尾开始搜索
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;
}
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;
}
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]);
}