2

actionscriptの正規表現を使用して、1回の呼び出しでテキスト内のある単語のすべての位置を見つけるにはどうすればよいですか。

たとえば、次の正規表現があります。

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

また、テキスト内に「含む」および「除外する」という単語が含まれています。

使ってます

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

単語を見つけるために、しかしそれは最初に最初のものを見つけます。「含む」と「除外する」というすべての単語を見つける必要があり、そこに位置するので、これを行います。

    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
4

2 に答える 2

2

それが獣の性質だと思います。「大量のテキスト」の意味はわかりませんが、パフォーマンスを向上させたい場合は、独自の解析関数を作成する必要があります。検索式はかなり単純なので、これはそれほど複雑ではありません。

同じ実装に基づいていると思ったので、String検索関数とのパフォーマンスを比較したことはありません。が速いRegExp場合は、試してみてください。インデックスを使用すると、次の検索反復の部分文字列を計算できます。String.match()String.search()

于 2012-05-04T11:45:50.390 に答える
-2

help.adobe.comサイトでこれを見つけました...

「文字列で正規表現を使用するためのメソッド:exec()メソッド」

…配列には、部分文字列の一致の開始のインデックス位置を示すインデックスプロパティも含まれています…</ p>

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
于 2012-07-13T11:05:21.630 に答える