[英]How to format strings with special characters like '&' in Lodash?
我正在使用Lodash将DIGITAL & TECHNOLOGY
类的字符串格式化为Digital & Technology
。 我尝试使用以下代码:
_.startCase(_.lowerCase('DIGITAL & TECHNOLOGY'));
但是,这使我回到了Digital Technology
。
这也不起作用:
var words = _.words('DIGITAL & TECHNOLOGY', /[^ ]+/g);
var newWords = '';
_.forEach(words, function(w){
newWords += _.capitalize(w);
})
这将返回Digital & technology
。
仅使用Lodash正确格式化此类字符串的合适方法是什么? 还是我必须混合使用Lodash和Javascript?
用大写字母替换每个单词字符序列:
var str = 'DIGITAL & TECHNOLOGY'; var result = str.replace(/\\w+/g, _.capitalize); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
首先要弄清楚,没有javascript就没有lodash之类的东西。
现在已经清除了,尝试以下大小:
_.map(_.split('DIGITAL & TECHNOLOGY', /\s+/), _.capitalize).join(' ')
这分裂了空间任意金额的话,将每个一个大写,并把它们重新加入到一个字符串(你会发现,呼吁capitalize
上只是符号是安全的)。
编辑:我想看看是否可以通过将上面的语句转换为只包含lodash的函数来使其更可重用。 这是我想出的:
const split = _.partialRight(_.split, /\s+/)
, map = _.partialRight(_.map, _.capitalize)
, join = _.partialRight(_.join, ' ');
const mycapitalize = _.flow([split, map, join]);
mycapitalize('DIGITAL & TECHNOLOGY'); // => "Digital & Technology"
我喜欢这种方法,因为它在语义上列出了处理字符串的步骤(即,首先将其拆分,然后将其映射,然后再将其加入)。 如果这是您的事情,它就是“单线”:
const mycapitalize = _.flow([
_.partialRight(_.split, /\s+/)
, _.partialRight(_.map, _.capitalize)
, _.partialRight(_.join, ' ')
]);
mycapitalize('DIGITAL & TECHNOLOGY'); // => "Digital & Technology"
只是为了详细说明我在这里所做的事情: partialRight
有点像对bind
的特殊调用。 它部分地应用了函数(这基本上是说它返回带有硬编码参数之一的函数的一种方式)。 按照惯例, partial
方法按顺序应用参数,所以partialRight
按相反的顺序应用参数(即,如果一个函数有两个参数, partial
将“硬编码”第一个参数,而partialRight
将“硬编码”第二个/最后一个)。 例如, _.split
接受两个参数,依次是要拆分的字符串和用于拆分的模式。 _.partial(_.split, 'foo bar')
提供了一个函数,该函数采用一种模式来分割"foo bar"
,而_.partialRight(_.split, /\\s+/)
提供了一个采用字符串的函数在/\\s+/
上分割。
对于任何多余的详细信息,我深表歉意。
此解决方案的另一部分是_.flow
。 流基本上是撰写 lodash用语(虽然撰写的大多数实现倾向于以相反的顺序应用功能;从右到左)。 _.flow
接受一个函数数组,并返回一个函数,该函数按顺序应用该数组中的每个函数。 例如, _.flow([add1, mult2])
将为您提供一个函数,该函数将一个数字加一,然后将其乘以2并返回结果。
在这种情况下, flow
接受了我们使用partialRight
创建的自定义操作,并将其应用到它获得的参数上。 在这种情况下,这意味着它将获得一个字符串,在/\\s+/
_.capitalize
其分割,映射到_.capitalize
,并以该顺序在' '
上进行连接。
可能出于您的目的过度设计了这些,但是仍然很有趣。
您可以使用_.capitalize
大写第一个字符,然后使用正则表达式替换所有其他的第一个字母:
var result = _.capitalize('DIGITAL & TECHNOLOGY').replace(/\\s(\\S)/g, function(v) { return v.toUpperCase(); }); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Lodash还有另一种方法toLower,该方法将字符串作为一个整体,而不是像lowerCase这样的空格分隔的单词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.