javascript - 使单词成为单数(singularize)

Jul*_*ius 6 javascript

我目前正在寻找一种“单数化”英语单词的方法。我找到了相反的方法。这是我到目前为止所想出的:

\n\n
function 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}\n
Run 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)

但你的代码的功能已经完成了。


GMK*_*ain 0

具有可定制选项的简单解决方案

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)