[英]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.