Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用string.match方法在字符串中查找同一单词的多个匹配项?_Regex_Actionscript 3_String_Search_Match - Fatal编程技术网

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

在Actionscript和AdobeFlex中,我将模式和regexp(带有全局标志)与string.match方法一起使用,它的工作方式与我希望的不同,除非匹配返回文本中同一单词的多次出现。在这种情况下,该单词的所有匹配项仅指向该单词第一次出现的索引。例如,如果文本是“cat dog cat cow”,模式是对cat*的搜索,则match方法返回一个包含三个“cat”匹配项的数组,但是,当我在数组中的循环上使用indexOf时,它们都只指向cat第一个匹配项的索引。我假设string.match方法就是这样(尽管如果我做错了什么或遗漏了什么,请告诉我!)。我想找到匹配的每次出现的具体索引,即使它是先前已匹配的单词的索引


我想知道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]);
}