簡體   English   中英

如何在Lodash中使用特殊字符(如'&')格式化字符串?

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

jsfiddle演示

只是為了詳細說明我在這里所做的事情: 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這樣的空格分隔的單詞。

https://lodash.com/docs/4.17.4#toLower

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM