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- 一个“单词边界”的零宽度匹配。这保证了你得到的是“the”而不是“there”或其他什么,但与它周围的空格不匹配。

因此,使用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 回答