我目前正在寻找一种“单数化”英语单词的方法。我找到了相反的方法。这是我到目前为止所想出的:
\n\nfunction singularize(word) {\n const endings = {\n ves: \'fe\',\n ies: \'y\',\n i: \'us\',\n zes: \'\',\n ses: \'\',\n es: \'\',\n s: \'\'\n };\n return word.replace(\n new RegExp(`(${Object.keys(endings).join(\'|\')})$`), \n r => endings[r]\n );\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然而,这在很多情况下不起作用(例如分析\xe2\x80\x93分析、现象\xe2\x80\x93现象、系列\xe2\x80\x93系列)。有没有更准确的方法来做到这一点而不嵌入整个字典?有没有办法访问浏览器的字典?
\n\n如果没有字典就没有办法,那么至少稍微准确一点的解决方案是什么?
\n小智 5
我认为你的代码中的所有内容都很棒。
但一个小错误不是在代码中,而是在你所拥有的结局对象中。
endings这是编辑对象和一些测试用例后的代码:
function singularize(word) {
const endings = {
ves: 'fe',
ies: 'y',
i: 'us',
zes: 'ze',
ses: 's',
es: 'e',
s: ''
};
return word.replace(
new RegExp(`(${Object.keys(endings).join('|')})$`),
r => endings[r]
);
}
console.log(singularize("papers"))
console.log(singularize("strategies"))
console.log(singularize("lives"))
console.log(singularize("games"))
console.log(singularize("cacti"))
console.log(singularize("dozes"))Run Code Online (Sandbox Code Playgroud)
但你的代码的功能已经完成了。
具有可定制选项的简单解决方案
const stringPluralize = (count, str, suffix = 's', includeCount=true) => {
let res = `${str}${count > 1 ? suffix : ''}`
if(includeCount==true) return `${count} ${res}`
return res;
}
console.log( stringPluralize( 0, 'box', 'es') )
console.log( stringPluralize( 2, 'box', 'es') )
console.log( stringPluralize( 4, 'box', 'es', false) ) // 'false' for text only without counts
console.log( stringPluralize( 1, 'member', 's') )
console.log( stringPluralize( 11, 'member', 's') )Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7973 次 |
| 最近记录: |