Javascript 使用string.prototype.replace替换为regexp和函数
下面返回“entiy”。我希望它返回“实体”。我怎样才能做到这一点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”之后的东西做什么;
'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 |$| |]
不允许字符串结尾,它与文本$
字符匹配。