在javascript中,I'我很难弄清楚如何让regex只替换捕获而不替换匹配

In javascript, I'm having trouble figuring out how to make a regex replace only the capture and not the match

本文关键字:替换 regex javascript 弄清楚 很难      更新时间:2023-09-26

以下函数用于从文本中删除随机冠词(词性)。最终,百分比将由用户调整,正则表达式更复杂,可以更好地捕捉单词边界,等等。它正在替换(大约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函数的位置/可选参数有关,但我不知道哪个是匹配的,哪个是捕获的,等等。

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

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

我意识到这与位置/可选参数有关到anon函数,但我不知道哪一个匹配这就是捕获等等。

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

if (Math.floor(Math.random()*101) < 50) return ' ';

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