国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 智能弦縮寫

智能弦縮寫

Feb 24, 2025 am 08:48 AM

Intelligent String Abbreviation

核心要點

  • JavaScript中的abbreviate()函數能夠智能地將字符串縮短到指定的最大長度,確保不會在單詞中間斷開,並去除多餘的空格。
  • 該函數接受三個參數:原始輸入字符串、最大輸出長度和一個可選的後綴,添加到縮寫字符串的末尾。如果未定義後綴,則默認為“…”,表示縮寫。
  • 此函數可用於需要限製字符串長度的任何場景,例如處理表單輸入、創(chuàng)建自定義工具提示、在基於 Web 的電子郵件列表中顯示郵件主題或預處理要通過 Ajax 發(fā)送的數據。
  • 該函數的有效性在於它能夠將輸入字符串拆分為單個單詞,然後重新組合盡可能多的單詞以適應最大長度。它還會預處理輸入以去除多餘的空格。

本文將介紹一個名為abbreviate()的簡潔高效的JavaScript函數,其主要功能正如其名:智能地縮短字符串到指定的長度。它確保不會在單詞中間截斷,並預處理字符串以去除多餘的空格。以下是abbreviate函數的代碼:

function abbreviate(str, max, suffix) {
  if ((str = str.replace(/^\s+|\s+$/g, '').replace(/[\r\n]*\s*[\r\n]+/g, ' ').replace(/[ \t]+/g, ' ')).length <= max) {
    return str;
  }

  var
    abbr = '',
    str = str.split(' '),
    suffix = (typeof suffix !== 'undefined' ? suffix : ' ...'),
    max = (max - suffix.length);

  for (var len = str.length, i = 0; i < len; i++) {
    if ((abbr + str[i]).length <= max) {
      abbr += str[i] + ' ';
    } else {
      break;
    }
  }

  return abbr.replace(/[ ]$/g, '') + suffix;
}

該函數接受三個參數:原始輸入字符串、最大輸出長度和一個可選的後綴,添加到縮寫字符串的末尾。如果未定義後綴,則默認為“…”(一個空格後跟三個點),這是一種常見且易於識別的縮寫指示方式。

函數用途

此函數可用於需要限製字符串長度的任何場景,作為簡單substr表達式的更智能的替代方案。可能的應用有很多,例如處理表單輸入、創(chuàng)建自定義工具提示、在基於 Web 的電子郵件列表中顯示郵件主題或預處理要通過 Ajax 發(fā)送的數據。例如,要將字符串限制為 100 個字符並添加默認後綴,我們可以這樣調用它:

str = abbreviate(str, 100);

這在概念上等同於此substr表達式:

str = str.substr(0, 96) + " ...";

但這是一種非常粗略的方法,因為它常常會導致輸出字符串在單詞中間斷開。 abbreviate函數專門設計為不會這樣做,它會在最後一個單詞之前拆分字符串,而不是在單詞中間拆分。因此,abbreviate()生成的輸出字符串通常會短於指定的最大長度,但絕不會長於它。該函數還考慮了縮寫後綴所需的空格,即如果指定的最大長度為 100,但後綴本身為 4 個字符,那麼我們最多只能使用 96 個主輸入字符串的字符。您可以通過傳遞空字符串來指定根本沒有後綴,或者如果您想縮寫標記字符串,則可以將其定義為 HTML 關閉標籤。例如,以下輸入:

abbreviate("<p>One two three four five</p>", 15, "");

將產生此輸出:

function abbreviate(str, max, suffix) {
  if ((str = str.replace(/^\s+|\s+$/g, '').replace(/[\r\n]*\s*[\r\n]+/g, ' ').replace(/[ \t]+/g, ' ')).length <= max) {
    return str;
  }

  var
    abbr = '',
    str = str.split(' '),
    suffix = (typeof suffix !== 'undefined' ? suffix : ' ...'),
    max = (max - suffix.length);

  for (var len = str.length, i = 0; i < len; i++) {
    if ((abbr + str[i]).length <= max) {
      abbr += str[i] + ' ';
    } else {
      break;
    }
  }

  return abbr.replace(/[ ]$/g, '') + suffix;
}

函數工作原理

abbreviate函數的關鍵在於能夠將輸入字符串拆分為單個單詞,然後重新組合盡可能多的單詞以適應最大長度。為了提高效率,我們需要確保單詞之間的分隔符是可預測的,最簡單的方法是最小化內部空格——將換行符和製表符轉換為空格,然後減少連續(xù)空格,以便每個內部空格塊都變成一個空格。當然,還有其他方法可以處理這個問題——例如,我們可以為分割定義更靈活的正則表達式,該表達式考慮了我們可能在單詞之間找到的所有不同類型的字符。甚至還有一個用於正則表達式的單詞邊界字符(“b”),所以我們也可以使用它。但我發(fā)現空格預處理本身很有用,尤其是在處理用戶輸入時。而按單詞邊界分割不會產生預期的結果,因為破折號、點、逗號和大多數特殊字符實際上都被視為單詞邊界。但我認為除非字符後跟空格,否則按標點符號分割單詞是不合適的,這樣連字符單詞和代碼片段就不會在中間分割。因此,該函數的第一項工作是進行空格預處理,然後如果結果已經短於指定的最大值,我們可以直接返回它:

str = abbreviate(str, 100);

如果我們不這樣做,那麼我們可能會遇到字符串在不必縮寫時被縮寫的情況,例如:

str = str.substr(0, 96) + " ...";

如果沒有第一個條件,我們將得到縮寫的輸出,因為指定的最大值必須考慮後綴的長度:

abbreviate("<p>One two three four five</p>", 15, "");

而添加第一個條件則會產生未修改的輸出:

<p>One two>

因此,除非我們在此時返回,否則我們將繼續(xù)編譯縮寫字符串——按空格分割輸入字符串以創(chuàng)建單個單詞,然後迭代地將每個單詞-空格對重新組合在一起,只要縮寫字符串短於指定的最大長度。一旦我們編譯了所需的內容,我們就可以中斷迭代,然後從縮寫字符串的末尾修剪殘留的空格,然後再添加後綴,最後返回結果。從右端修剪殘留的空格然後再用默認後綴添加它看起來有點浪費,但這允許輸入後綴根本沒有空格。

結論

這就是一個簡單但智能的字符串縮寫函數,它還會預處理輸入以去除多餘的空格。根據我的經驗,這兩個要求通常會同時出現,這就是我開發(fā)此函數以這種方式工作的原因。

(由於篇幅限制,此處省略了FAQ部分。 如果需要,可以單獨提供FAQ部分的偽原創(chuàng)版本。)

以上是智能弦縮寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用於不同的應用場景。 Java用於大型企業(yè)和移動應用開發(fā),而JavaScript主要用於網頁開發(fā)。

JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時間處理需注意以下幾點:1.創(chuàng)建Date對像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

為什麼要將標籤放在的底部? 為什麼要將標籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個階段,捕獲是從頂層向下到目標元素,冒泡是從目標元素向上傳播到頂層。 1.事件捕獲通過addEventListener的useCapture參數設為true實現;2.事件冒泡是默認行為,useCapture設為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動態(tài)內容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯誤處理。了解這兩個階段有助於精確控制JavaScript響應用戶操作的時機和方式。

JavaScript:探索用於高效編碼的數據類型 JavaScript:探索用於高效編碼的數據類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

如何減少JavaScript應用程序的有效載荷大?。? />
								</a>
								<a href=如何減少JavaScript應用程序的有效載荷大??? Jun 26, 2025 am 12:54 AM

如果JavaScript應用加載慢、性能差,問題往往出在payload太大,解決方法包括:1.使用代碼拆分(CodeSplitting),通過React.lazy()或構建工具將大bundle拆分為多個小文件,按需加載以減少首次下載量;2.移除未使用的代碼(TreeShaking),利用ES6模塊機制清除“死代碼”,確保引入的庫支持該特性;3.壓縮和合併資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合併文件並優(yōu)化靜態(tài)資源;4.替換重型依賴,選用輕量級庫如day.js、fetch

See all articles