Javascript 使用string.prototype.replace替换为regexp和函数

Javascript 使用string.prototype.replace替换为regexp和函数,javascript,regex,Javascript,Regex,下面返回“entiy”。我希望它返回“实体”。我怎样才能做到这一点 'entities '.replace(/\w(ies)(?:[\W|$|_])+/g, 'y'); 只需在“ies”之前捕捉角色: 现在你的问题是关于函数的使用;你也可以这样做: 'entities '.replace(/(\w)(ies)(?:[\W|$|_])+/g, function(_, before, repl) { return before + "y"; }); 我不知道你想对“ies”之后的东西做什么;

下面返回“entiy”。我希望它返回“实体”。我怎样才能做到这一点

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

只需在“ies”之前捕捉角色:

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

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

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

只需捕获“ies”之前的字符即可:

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

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

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

您可以将
\w
更改为
\B
,以验证没有单词边界


console.log('entities')。替换(/\Bies\b/g,'y')您可以将
\w
更改为
\B
,以验证没有单词边界


console.log('entities')。替换(/\Bies\b/g,'y')
之前为什么还要抓拍角色?那
[\W |$| | |]
呢?@Gavin??因为他不想失去它。
.replace()
函数希望替换整个匹配项。@Pointy:它可以更优化,
“实体”。replace(/(\w)ies(?[\w\u]+|$)/g,$1y')@PranavCBalan是的,那也行。我一直在想OP是怎么想的,因为它涉及到使用函数,所以我就把这部分放在一边。为什么以前还要抓拍角色呢?那
[\W |$| |]
呢?@Gavin??因为他不想失去它。
.replace()
函数希望替换整个匹配项。@Pointy:它可以更优化,
“实体”。replace(/(\w)ies(?[\w\u]+|$)/g,$1y')@PranavCBalan是的,那也行。我一直在想OP是怎么想的,因为它涉及到使用函数,所以我就把这部分放在一边。我如何才能得到
“实体”。替换(/\B(ies)(?:[\W$)+/g,“y”)
以返回
实体
?注意尾随空格的丢失。@BenAston您希望正则表达式做什么?您可以调用
trim()
删除尾随空格。
'entities'。如果
ies
位于字符串末尾,则替换(/\B(ies)(?:[\W |$|)+/g,'y')
不起作用。为什么?(我原以为
$
会涵盖这种情况)你修改后的答案很好。@BenAston字符类
[\W |$| |]
不允许字符串结尾,它匹配的是一个文本
$
字符。如何获得
'entities'。替换(/\B(ies)(?:[\W |$| | | | | | |])++/g,'y')
返回
entity
?注意尾随空格的丢失。@BenAston您希望正则表达式做什么?您可以调用
trim()
删除尾随空格。
'entities'。如果
ies
位于字符串末尾,则替换(/\B(ies)(?:[\W |$|)+/g,'y')
不起作用。为什么?(我原以为
$
会涵盖这种情况)你修改后的答案很好。@BenAston字符类
[\W |$| |]
不允许字符串结尾,它与文本
$
字符匹配。