推薦 5 個(gè) JavaScript 字符串插件庫(kù)

英文 | https://blog.bitsrc.io/5-string-manipulation-libraries-for-javascript-9ca5da8b4eb8
翻譯 | 楊小二
function camelize(str) {return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {if (+match === 0) return ""; // or if (/\s+/.test(match)) for white spacesreturn index === 0 ? match.toLowerCase() : match.toUpperCase();});}
上面的代碼片段是 StackOverflow 中投票最多的答案。但這也無(wú)法解決字符串為 ---Foo---bAr--- 的情況。

這就是字符串操作庫(kù)可以派上用場(chǎng)的地方。它們可以輕松實(shí)現(xiàn)復(fù)雜的字符串操作,并且還可以考慮給定問(wèn)題的所有可能用例。這對(duì)你有幫助,因?yàn)槟阒恍枰{(diào)用一個(gè)方法即可獲得有效的解決方案。
讓我們看看一些用于 JavaScript 的字符串操作庫(kù)。
1、String.js
string.js或簡(jiǎn)稱 S ,它是一個(gè)輕量級(jí)(文件< 5 kb )JavaScript 庫(kù),用于瀏覽器或 Node.js,提供額外的 String 方法。
安裝
npm i string值得注意的方法:
between(left, right) — 在左右字符串之間提取一個(gè)字符串。
這可以在嘗試獲取 HTML 中兩個(gè)標(biāo)簽之間的元素時(shí)使用。
var S = require('string');S('<a>This is a link</a>').between('<a>', '</a>').s// 'This is a link'
camelize() — 刪除所有下劃線或破折號(hào),并將字符串轉(zhuǎn)換為駝峰式大小寫。
這個(gè)函數(shù)可以用來(lái)解決本文開(kāi)頭提到的問(wèn)題。
var S = require('string');S('---Foo---bAr---').camelize().s;//'fooBar'
humanize() — 將輸入轉(zhuǎn)換為人性化的形式。
這個(gè)從頭開(kāi)始實(shí)現(xiàn)的功能肯定需要相當(dāng)多的代碼行。
var S = require('string');S(' capitalize dash-CamelCase_underscore trim ').humanize().s //'Capitalize dash camel case underscore trim'
stripPunctuation() — 去除給定字符串中的所有標(biāo)點(diǎn)符號(hào)。
如果你從頭開(kāi)始實(shí)現(xiàn)此功能,你很可能會(huì)錯(cuò)過(guò)標(biāo)點(diǎn)符號(hào)。
var S = require('string');S('My, st[ring] *full* of %punct)').stripPunctuation().s;//My string full of punct
2、Voca
Voca 是一個(gè) JavaScript 字符串操作庫(kù)。Voca 庫(kù)中提供了 Change case、trim、pad、slugify、latinise、sprintf’y、truncate、escape 和其他有用的字符串操作方法。為了減少應(yīng)用程序構(gòu)建,模塊化設(shè)計(jì)允許你加載完整的庫(kù)或特定功能。
該庫(kù)已經(jīng)過(guò)全面測(cè)試,有據(jù)可查,并提供長(zhǎng)期支持。
安裝
npm i voca值得注意的方法
Camel Case(字符串?dāng)?shù)據(jù))
將數(shù)據(jù)轉(zhuǎn)換為駝峰式大小寫。
var v = require('voca');v.camelCase('foo Bar');// => 'fooBar'v.camelCase('FooBar');// => 'fooBar'v.camelCase('---Foo---bAr---');// => 'fooBar'
Latinise(字符串?dāng)?shù)據(jù))
通過(guò)刪除變音符號(hào)對(duì)數(shù)據(jù)進(jìn)行Latinise。
var v = require('voca');v.latinise('cafe\u0301'); // or 'cafe?'// => 'cafe'v.latinise('ao?t décembre');// => 'aout decembre'v.latinise('как прекрасен этот мир');// => 'kak prekrasen etot mir'
isAlphaDigit(字符串?dāng)?shù)據(jù))
檢查數(shù)據(jù)是否僅包含字母和數(shù)字字符。(字母數(shù)字)
var v = require('voca');v.isAlphaDigit('year2020');// => truev.isAlphaDigit('1448');// => truev.isAlphaDigit('40-20');// => false
CountWords(字符串?dāng)?shù)據(jù))
計(jì)算數(shù)據(jù)中的字?jǐn)?shù)。
var v = require('voca');v.countWords('gravity can cross dimensions');// => 4v.countWords('GravityCanCrossDimensions');// => 4v.countWords('Gravity - can cross dimensions!');// => 4
EscapeRegExp(字符串?dāng)?shù)據(jù))
轉(zhuǎn)義正則表達(dá)式特殊字符 - [ ] / { } ( ) * + ? . \ ^ $ | 在數(shù)據(jù)中。
var v = require('voca');v.escapeRegExp('(hours)[minutes]{seconds}');// => '\(hours\)\[minutes\]\{seconds\}'
更多內(nèi)容地址:https://vocajs.com。
3、Anchorme.js
這是一個(gè)小巧、快速的 Javascript 庫(kù),可幫助檢測(cè)文本中的鏈接 / URL / 電子郵件并將它們轉(zhuǎn)換為可點(diǎn)擊的 HTML 錨鏈接。
它高度敏感,誤報(bào)最少。
它根據(jù)完整的 IANA 列表驗(yàn)證 URL 和電子郵件。
驗(yàn)證端口號(hào)(如果存在)。
驗(yàn)證 IP 八位字節(jié)數(shù)(如果存在)。
適用于非拉丁字母 URL。
安裝
npm i anchorme用法
import anchorme from "anchorme";//or//var anchorme = require("anchorme").default;const input = "some text with a link.com";const resultA = anchorme(input);//some text with a <a >link.com</a>
你可以傳入其他擴(kuò)展以進(jìn)一步自定義該功能。
4、Underscore.string
Underscore.string 是 JavaScript 的字符串操作擴(kuò)展,你可以使用或不使用 Underscore.js。Underscore.string 是一個(gè) JavaScript 庫(kù),用于輕松處理字符串,是受 Prototype.js、Right.js 和 Underscore 啟發(fā)的 Underscore.js 擴(kuò)展。
Underscore.string 為你提供了幾個(gè)有用的功能:capitalize、clean、includes、count、escapeHTML、unescapeHTML、insert、splice、startsWith、endsWith、titleize、trim、truncate 等等。
安裝
npm install underscore.string值得注意的方法
numberFormat(number) — 格式化數(shù)字
將數(shù)字格式化為帶有十進(jìn)制和順序分隔的字符串。
var _ = require("underscore.string");_.numberFormat(1000, 3)=> "1,000.000"_.numberFormat(123456789.123, 5, '.', ',');=> "123,456,789.12300"
levenshtein(string1,string2) — 計(jì)算兩個(gè)字符串之間的 Levenshtein 距離。
在此處了解有關(guān) levenshtein 距離算法的更多信息。
var _ = require("underscore.string");_.levenshtein('kitten', 'kittah');=> 2
chop(string, step) — 將給定的字符串切成小塊。
var _ = require("underscore.string");_.chop('whitespace', 3);=> ['whi','tes','pac','e']
了解有關(guān)下劃線字符串的更多信息地址:http://gabceb.github.io/underscore.string.site/#chop
5、Stringz
這個(gè)庫(kù)的主要亮點(diǎn)是它是 unicode 感知的。如果你運(yùn)行下面的代碼,輸出將為 2。
"??".length// -> 2
這是因?yàn)?String.length() 返回字符串中的代碼單元數(shù),而不是字符數(shù)。實(shí)際上,在 010000–03FFFF 和 040000–10FFFF 范圍內(nèi)的某些字符每個(gè)代碼點(diǎn)最多可以使用 4 個(gè)字節(jié)(32 位),但這不會(huì)改變答案:某些字符需要超過(guò) 2 個(gè)字節(jié)才能表示,因此它們需要1個(gè)以上的代碼點(diǎn)。
閱讀有關(guān) JavaScript unicode 問(wèn)題的更多信息地址:
https://mathiasbynens.be/notes/javascript-unicode
安裝
npm install stringz值得注意的方法
limit(字符串(string),limit,padString,padPosition)
將字符串限制為給定的寬度。
const stringz = require('stringz');// Truncate:stringz.limit('Life’s like a box of chocolates.', 20);// "Life's like a box of"// Pad:stringz.limit('Everybody loves emojis!', 26, '??');// "Everybody loves emojis!??????"stringz.limit('What are you looking at?', 30, '+', 'left');// "++++++What are you looking at?"// Unicode Aware:stringz.limit('??????', 2);// "????"stringz.limit('????????', 4, '????');// "????????????????"
toArray(字符串)
將字符串轉(zhuǎn)換為數(shù)組
const stringz = require('stringz');stringz.toArray('abc');// ['a','b','c']//Unicode awarestringz.toArray('????????');// ['????', '??', '??']
最后
感謝你的閱讀,如果你有任何問(wèn)題,歡迎在留言區(qū)告訴我。
學(xué)習(xí)更多技能
請(qǐng)點(diǎn)擊下方公眾號(hào)
![]()
