3

次の関数は、テキストからランダムな冠詞(品詞)を削除することを目的としています。最終的には、パーセンテージはユーザーが調整可能になり、正規表現は単語の境界をより適切にキャッチするためにさらに洗練されます。これは置き換えられます(約50/50)が、スペースも押しつぶされます(一致しますがキャプチャされません)。私はここで本当に頭がおかしいと思いますが、適切な構文を理解できません...誰か助けてもらえますか?

function posArticles(t) {
   var text = t;
   var re = / (a|the|an) /g;    
   var rArray;

   text = text.replace(re, function(_, m) {
       if (Math.floor(Math.random()*101) < 50) return '';
       else return m;
   });

   return text;
}

これはanon関数の定位置/オプションの引数に関係していることは理解していますが、どちらが一致で、どちらがキャプチャであるかなどがわかりません。

4

3 に答える 3

2

これを行う方法はたくさんありますが、最善の策は\b、「単語の境界」の幅がゼロの一致を使用することだと思います。それはあなたが「そこ」などではなく「そこ」を取得していることを保証しますが、その周りのスペースと一致しません。

したがって、re = /\b([Aa]n?|[Tt]he)\b/;

于 2012-09-11T18:37:21.277 に答える
1

これはanon関数の定位置/オプションの引数に関係していることは理解していますが、どちらが一致で、どちらがキャプチャであるかなどがわかりません。

コールバック関数に渡される最初の引数は完全一致です(つまり:) _ = ' the '。次の引数は、キャプチャされたグループ(m = 'the')です。コールバック関数は一致全体を置き換えているため、式にスペースを含めると、それらも置き換えられます。

于 2012-09-11T18:45:38.077 に答える
1
if (Math.floor(Math.random()*101) < 50) return ' ';

空の文字列の代わりにスペースを返します:)

于 2012-09-11T18:48:51.730 に答える