使用带有正则表达式和函数的string.prototype.replace

时间:2016-11-10 18:46:30

标签: javascript regex

以下返回' entiy'。我希望它返回' entity'。我怎样才能做到这一点?

'entities '.replace(/\w(ies)(?:[\W|$|_])+/g, 'y');

2 个答案:

答案 0 :(得分:3)

您可以将\w更改为\B,以确认没有字边界。

console.log('entities '.replace(/\Bies\b/g, 'y'));

答案 1 :(得分:2)

在“ies”之前捕捉角色:

'entities '.replace(/(\w)(ies)(?:[\W|$|_])+/g, '$1y');

现在你的问题是关于使用一个函数;你也可以这样做:

'entities '.replace(/(\w)(ies)(?:[\W|$|_])+/g, function(_, before, repl) {
  return before + "y";
});

我不知道你想要对“ies”后面的东西做什么;您可以捕获它并将其粘合到替换中,或者使用正向前瞻。由前瞻匹配的输入文本的部分不是与替换操作相关的匹配的一部分。换句话说,预测会根据模式成功或失败,但匹配的字符不会成为“待替换”分组的一部分。