JavaScript中字符串截取的六種高效技巧分享
一、基礎(chǔ)方法:substring、substr 和 slice
1. substring() 方法
substring() 是最傳統(tǒng)的字符串截取方法,它接受兩個(gè)參數(shù):起始索引和結(jié)束索引(可選)。
const str = "Hello, JavaScript!"; // 從索引7開始截取到末尾 console.log(str.substring(7)); // "JavaScript!" // 從索引7截取到17(不包括17) console.log(str.substring(7, 17)); // "JavaScript" // 有趣特性:會(huì)自動(dòng)交換參數(shù)如果start>end console.log(str.substring(5, 3)); // "lo" (等同于 substring(3,5)) console.log(str.substring(3, 5)); // "lo"
特點(diǎn):
- 不修改原字符串
- 負(fù)參數(shù)會(huì)被當(dāng)作0
- 自動(dòng)處理起始大于結(jié)束的情況
2. substr() 方法(已廢棄)
雖然 substr() 仍然可用,但已被標(biāo)記為遺留功能,不建議在新代碼中使用。
const str = "Hello, JavaScript!"; // 從索引7開始截取10個(gè)字符 console.log(str.substr(7, 10)); // "JavaScript"
特點(diǎn):
- 第二個(gè)參數(shù)是長(zhǎng)度而非結(jié)束索引
- 負(fù)的起始索引表示從末尾開始計(jì)算
3. slice() 方法
slice() 是最推薦的通用截取方法,行為與數(shù)組的 slice() 一致。
const str = "Hello, JavaScript!"; // 從索引7截取到末尾 console.log(str.slice(7)); // "JavaScript!" // 從索引7截取到17(不包括17) console.log(str.slice(7, 17)); // "JavaScript" // 支持負(fù)索引(從末尾計(jì)算) console.log(str.slice(-6)); // "cript!" console.log(str.slice(7, -1)); // "JavaScript"
特點(diǎn):
- 支持負(fù)索引
- 不自動(dòng)交換參數(shù)
- 更直觀和一致的行為
二、高級(jí)技巧:正則表達(dá)式截取
4. match() 方法
當(dāng)需要基于模式而非位置截取時(shí),正則表達(dá)式是強(qiáng)大工具。
const str = "訂單號(hào):ORD-2023-98765,請(qǐng)查收";
// 提取訂單號(hào)
const orderNumber = str.match(/ORD-\d{4}-\d{5}/)[0];
console.log(orderNumber); // "ORD-2023-98765"
// 提取所有數(shù)字
const numbers = str.match(/\d+/g);
console.log(numbers); // ["2023", "98765"]
高級(jí)用法:
- 使用捕獲組提取特定部分
- 全局匹配獲取所有符合項(xiàng)
5. split() + 解構(gòu)賦值
這個(gè)組合技巧能優(yōu)雅地提取字符串的特定部分。
const fullName = "張 三";
// 傳統(tǒng)方式
const parts = fullName.split(" ");
const firstName = parts[0];
const lastName = parts[1];
// 使用解構(gòu)賦值
const [firstName, lastName] = fullName.split(" ");
console.log(firstName, lastName); // "張" "三"
// 處理URL路徑
const url = "/products/electronics/12345";
const [,, category, id] = url.split("/");
console.log(category, id); // "electronics" "12345"
優(yōu)勢(shì):
- 代碼簡(jiǎn)潔
- 可讀性強(qiáng)
- 一次性提取多個(gè)部分
三、ES6+ 現(xiàn)代方法
6. 國(guó)際化截取:Intl.Segmenter
處理像中文、日文等沒有空格分隔的語言時(shí),傳統(tǒng)方法難以正確截取詞語。
const str = '測(cè)試字符串,包含中文和英文。';
// 傳統(tǒng)方法會(huì)按字截取s
console.log(str.slice(0, 4)); // "測(cè)試字符" (可能不準(zhǔn)確)
// 使用Intl.Segmenter按詞截取
const segmenter = new Intl.Segmenter('zh-CN', { granularity: 'word' });
const segments = [...segmenter.segment(str)];
const firstWord = segments[0].segment;
console.log(firstWord); // "測(cè)試" (完整詞)
console.log(segments.map((seg) => seg.segment)); // ['測(cè)試', '字符','串', ',','包含', '中文','和', '英文','。']
優(yōu)勢(shì):
- 尊重語言規(guī)則
- 正確處理象形文字、表情符號(hào)等
- 支持多種粒度(字、詞、句子)
四、性能優(yōu)化與最佳實(shí)踐
性能比較:
- 對(duì)于簡(jiǎn)單截取,
slice()通常性能最好 - 復(fù)雜模式匹配時(shí),預(yù)編譯正則表達(dá)式更高效
安全截取:
function safeSlice(str, maxLength, suffix = "...") {
if (str.length <= maxLength) return str;
return str.slice(0, maxLength - suffix.length) + suffix;
}
console.log(safeSlice("這是一個(gè)很長(zhǎng)的字符串", 8)); // "這是一個(gè)..."
多字節(jié)字符處理:
function mbSubstr(str, start, length) {
return [...str].slice(start, start + length).join("");
}
console.log(mbSubstr("????????家庭", 1, 2)); // "????"
結(jié)語
到此這篇關(guān)于JavaScript中字符串截取的六種高效技巧的文章就介紹到這了,更多相關(guān)JavaScript字符串截取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序?qū)崿F(xiàn)轉(zhuǎn)盤抽獎(jiǎng)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)轉(zhuǎn)盤抽獎(jiǎng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
JavaScript可折疊區(qū)域?qū)崿F(xiàn)代碼
可折疊區(qū)域的基本思想:通過點(diǎn)擊某個(gè)地方來顯示或隱藏屏幕中的某個(gè)區(qū)域。2010-10-10
Javascript保存網(wǎng)頁為圖片借助于html2canvas庫實(shí)現(xiàn)
借助于html2canvas庫,把網(wǎng)頁保存為Canvas畫布,再把生成的canvas保存成圖片,下面的示例,大家可以看看2014-09-09
微信小程序canvas截取任意形狀的實(shí)現(xiàn)代碼
這篇文章主要介紹了微信小程序canvas截取任意形狀的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Fetch超時(shí)設(shè)置與終止請(qǐng)求詳解
這篇文章主要給大家介紹了關(guān)于Fetch超時(shí)設(shè)置與終止請(qǐng)求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Fetch具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
setTimeout()遞歸調(diào)用不加引號(hào)出錯(cuò)的解決方法
用了setTimeout()想實(shí)現(xiàn)遞歸調(diào)用,如果第一個(gè)參數(shù)不加引號(hào)的話,就會(huì)出錯(cuò),下面與大家分享下該如何解決2014-09-09
javascript自執(zhí)行函數(shù)之偽命名空間封裝法
比較之后,我們可以發(fā)現(xiàn),第二方法更加的直觀,易于理解。但是少了封裝過程,代碼完全裸露在外。2010-12-12
JavaScript如何調(diào)用C++模塊中的函數(shù)
這篇文章主要給大家介紹了關(guān)于JavaScript如何調(diào)用C++模塊中函數(shù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01

