Lodash 标题大小写(每个单词的大写首字母)
Lodash title case (uppercase first letter of every word)
我正在浏览 lodash 文档和其他 Stack Overflow 问题 - 虽然有几种原生 JavaScript 方法可以完成此任务,但有没有办法使用纯 lodash 函数(或至少现有的原型函数(将字符串转换为标题大小写,这样我就不必使用正则表达式或定义新函数?
例如
This string ShouLD be ALL in title CASe
应该成为
This String Should Be All In Title Case
这可以通过对startCase
进行小幅修改来完成:
_.startCase(_.toLower(str));
console.log(_.startCase(_.toLower("This string ShouLD be ALL in title CASe")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>
_.startCase(_.camelCase(str))
对于非用户生成的文本,这处理的情况多于接受的答案
> startCase(camelCase('myString'))
'My String'
> startCase(camelCase('my_string'))
'My String'
> startCase(camelCase('MY_STRING'))
'My String'
> startCase(camelCase('my string'))
'My String'
> startCase(camelCase('My string'))
'My String'
带有 lodash 版本 4。
_.upperFirst(_.toLower(str))
'This string ShouLD be ALL in title CASe'
.split(' ')
.map(_.capitalize)
.join(' ');
这个问题的答案好坏参半。有些人建议使用_.upperFirst
,而有些人建议使用_.startCase
。
了解它们之间的区别。
i( _.upperFirst
将转换字符串的第一个字母,然后字符串可能是单个单词或多个单词,但字符串的唯一第一个字母将转换为大写。
_.upperFirst('jon doe')
输出:
Jon doe
查看文档 https://lodash.com/docs/4.17.10#upperFirst
ii( _.startCase
将转换字符串中每个单词的第一个字母。
_.startCase('jon doe')
输出:
Jon Doe
https://lodash.com/docs/4.17.10#startCase
这是我在自己的用例上测试的最干净、最灵活的实现。
import { capitalize, map } from "lodash";
const titleCase = (str) => map(str.split(" "), capitalize).join(" ");
// titleCase("ALFRED NÚÑEZ") => "Alfred Núñez"
// titleCase("alfred núñez") => "Alfred Núñez"
// titleCase("AlFReD nÚñEZ") => "Alfred Núñez"
// titleCase("-") => "-"
来自 https://github.com/lodash/lodash/issues/3383#issuecomment-430586750
'JHON&JOHN C/O DR. BLah'.replace(/'w+/g, _.capitalize);
结果:
'Jhon&John C/O Dr. Blah'
这是一种仅使用 lodash 方法而不使用内置方法的方法:
_.reduce(_.map(_.split("Hello everyOne IN the WOrld", " "), _.capitalize), (a, b) => a + " " + b)
下面的代码将完美运行:
var str = "TITLECASE";
_.startCase(str.toLowerCase());
这只能用 lodash 来完成
properCase = string =>
words(string)
.map(capitalize)
.join(' ');
const proper = properCase('make this sentence propercase');
console.log(proper);
//would return 'Make This Sentence Propercase'
var s = 'This string ShouLD be ALL in title CASe';
_.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')
除非我错过了,否则 lodash 没有自己的小写/大写方法。
const titleCase = str =>
str
.split(' ')
.map(str => {
const word = str.toLowerCase()
return word.charAt(0).toUpperCase() + word.slice(1)
})
.join(' ')
您还可以拆分出地图功能来做单独的单词
不像@4castle的回答那么简洁,但描述性和充满lodash,尽管如此......
var basicTitleCase = _
.chain('This string ShouLD be ALL in title CASe')
.toLower()
.words()
.map(_.capitalize)
.join(' ')
.value()
console.log('Result:', basicTitleCase)
console.log('Exact Match:' , basicTitleCase === 'This String Should Be All In Title Case')
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>
这是我用例的另一种解决方案:《魔鬼的脊梁》
只是:
function titleCase (str) {
return _.map(str.split(' '), _.upperFirst).join(' ');
}
使用 startCase 会删除撇号,所以我必须解决这个限制。其他解决方案似乎非常复杂。我喜欢这个,因为它干净,易于理解。
你可以简单地使用lowdash大写方法,它将字符串的第一个字符转换为大写,其余字符转换为小写。https://lodash.com/docs/#capitalize
const str = 'titlecase this string ';
_.capitalize(str); //Titlecase This String
使用 lodash 4,您可以使用 _.capitalize((
_.capitalize('JOHN')
它返回"约翰">
有关详细信息,请参阅 https://lodash.com/docs/4.17.5#capitalize
- 当鼠标悬停在文本中的单词上时显示警报
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- Regex:匹配以“AM”结尾的单词(不区分大小写比较)
- regex,用于修改单词末尾特定大小写的字符
- Regex以匹配整数或单词“”;“其他”;,不区分大小写
- 用于捕获单词的正则表达式,无论大小写
- 正则表达式,用于从 TitleCase(驼峰大小写)获取最后一个单词
- 将句子或驼峰大小写单词转换为棘壳
- 返回标题大小写,尊重单词中间的大写字母
- 无论大小写,请检查文本框中是否有单词
- 如果字符串具有不同的大小写,如何将字符串中每个单词的首字母转换为大写
- Regex函数使单词标题大小写(包括连字符)
- 统计jquery中一个区分大小写的单词在一个段落中出现的次数
- Javascript:查找并突出显示所有出现的关键字.不区分大小写,部分和完整的单词
- RegExp不区分大小写搜索整个单词与变量
- 修改代码以换行整个单词&使它不区分大小写
- 不区分大小写,查找单词并将其换行到span中
- 如何匹配整个单词,而每个单词不区分大小写没有RegexOptions.IgnoreCase
- 将字符串中找到的单词替换为大小写敏感(搜索和高亮显示)
- Lodash 标题大小写(每个单词的大写首字母)