在javascript中,I';我很难想出如何让正则表达式只替换捕获而不是匹配

在javascript中,I';我很难想出如何让正则表达式只替换捕获而不是匹配,javascript,regex,Javascript,Regex,以下函数用于从文本中删除随机冠词(词类)。最终,百分比将由用户调整,正则表达式将更加复杂,以更好地捕捉单词边界,等等。它正在替换(大约50/50),但它也在挤压空格(匹配但未捕获)。我想我在这里真的有点头晕目眩,但我想不出正确的语法。。。有人能帮忙吗 function posArticles(t) { var text = t; var re = / (a|the|an) /g; var rArray; text = text.replace(re, funct

以下函数用于从文本中删除随机冠词(词类)。最终,百分比将由用户调整,正则表达式将更加复杂,以更好地捕捉单词边界,等等。它正在替换(大约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;
}
函数posArticles(t){
var text=t;
var re=/(a | the | an)/g;
拉雷变种;
text=text.replace(re,function(Um){
if(Math.floor(Math.random()*101)<50)返回“”;
否则返回m;
});
返回文本;
}

我意识到这与anon函数的位置/可选参数有关,但我无法确定哪一个是匹配的,哪一个是捕获的等等

有很多方法可以做到这一点,但我认为最好的办法是使用
\b
——一种零宽度匹配的“单词边界”。这保证了你得到的是“the”而不是“There”或其他什么,但与它周围的空格不匹配

因此,使用
re=/\b([Aa]n?|[Tt]he)\b/

我意识到这与位置/可选参数有关 到anon函数,但我无法找出匹配项和 这就是捕获等等

传递给回调函数的第一个参数是完整匹配的(即:
。='the'
)。下一个参数是捕获的组(
m='the'
)。回调函数正在替换整个匹配项,因此如果在表达式中包含空格,它们也将被替换。

if(Math.floor(Math.random()*101)<50)返回“”;
if (Math.floor(Math.random()*101) < 50) return ' ';

返回一个空格而不是空字符串:)

这就是
.replace()
的工作原理:它确实替换了整个匹配项。我想我真的是个笨蛋。当我添加逗号时,我很担心,但无论如何你都不会在文章后面添加逗号。尝试一个简单的解决方案(比如我的),在一些示例输入上运行它,看看它是如何运行的。如果它不起作用,让我们知道它失败的边缘和角落,我们可以从那里开始。