[js高手之路] 跟GhostWu一起封裝一個字元串工具庫-擴展字元串位置方法(4)

来源:http://www.cnblogs.com/ghostwu/archive/2017/08/21/7406565.html
-Advertisement-
Play Games

本文,我們接著之前的框架繼續擴展,這次擴展了一共有5個與字元串位置相關的方法 between( left, right ) 返回兩個字元串之間的內容, 如果第二個參數沒有傳遞,返回的是找到的第一個參數 之後 到 字元串結尾的所有字元串 如果第二個參數傳遞了,但是從left這個位置查找不到,就返回空字 ...


本文,我們接著之前的框架繼續擴展,這次擴展了一共有5個與字元串位置相關的方法

between( left, right )

返回兩個字元串之間的內容, 如果第二個參數沒有傳遞,返回的是找到的第一個參數 之後 到 字元串結尾的所有字元串

如果第二個參數傳遞了,但是從left這個位置查找不到,就返回空字元串

例子:

G( 'ghost wu tell you how to learn js' ).between( 'tell', 'learn' ).s    返回的是tell和learn之間的字元串, 結果為:you how to G( 'ghost wu tell you how to learn js' ).between( 'tell' ).s 返回的是tell後面所有的字元串,結果為:you how to learn js G( 'ghost wu tell you how to learn js' ).between( 'tell', 'wu' ).s 返回空字元串   chompLeft( prefix ) 例子:返回以prefix開頭 到 字元串結尾的所有字元串 G( 'ghost wu tell you how to learn js' ).chompLeft( 'tell' ).s; //ghost wu tell you how to learn js G( 'ghost wu tell you how to learn js' ).chompLeft( 'ghost' ).s; //wu tell you how to learn js   startWith( prefix ): 判斷是否以prefix這個字元串開始 endWith( prefix ): 判斷是否以prefixe這個字元串結尾 G( 'ghost wu tell you how to learn js---ghost wu' ).startWith('wu');//false G( 'ghost wu!asbc# ghost wu' ).endWith('wu');//true   chompRight( prefix ) 例子:返回從字元串開始到以prefix結尾之間的字元串 G( 'ghost wu tell you how to learn js---ghost wu' ).chompRight('wu').s;//ghost wu tell you how to learn js---ghost  
  1 ; (function (window, undefined) {
  2     function init(obj, s) {
  3         if (s !== null && s !== undefined) {
  4             if (typeof s === 'string') {
  5                 obj.s = s;
  6             } else {
  7                 obj.s = s.toString();
  8             }
  9         } else {
 10             obj.s = s;
 11         }
 12     }
 13 
 14     function G(s) {
 15         init(this, s);
 16     }
 17 
 18     function GhostWu(s) {
 19         return new G(s);
 20     }
 21 
 22     var sProto = String.prototype;
 23     G.prototype = {
 24         constructor: G,
 25         capitalize: function () {
 26             return new this.constructor(this.s.slice(0, 1).toUpperCase() + this.s.substring(1).toLowerCase());
 27         },
 28         trimLeft: function () {
 29             var s;
 30             if (sProto.trimLeft === 'undefined')
 31                 s = this.s.trimLeft();
 32             else
 33                 s = this.s.replace(/^\s+/g, '');
 34             return new this.constructor(s);
 35         },
 36         trimRight: function () {
 37             var s;
 38             if (sProto.trimRight === 'undefined')
 39                 s = this.s.trimRight();
 40             else
 41                 s = this.s.replace(/\s+$/g, '');
 42             return new this.constructor(s);
 43         },
 44         trim: function () {
 45             var s;
 46             if (typeof sProto.trim === 'undefined') {
 47                 s = this.s.replace(/^\s+|\s+$/g, '');
 48             } else {
 49                 s = this.s.trim();
 50             }
 51             return new this.constructor(s);
 52         },
 53         camelize: function () {
 54             var s = this.trim().s.replace(/(\-|_|\s)+(.)?/g, function (s0, s1, s2) {
 55                 return (s2 ? s2.toUpperCase() : '');
 56             });
 57             return new this.constructor(s);
 58         },
 59         dasherize: function () {
 60             var s = this.trim().s.replace(/[_\s]+/g, '-').replace(/([A-Z])/g, '-$1').replace(/-+/g, '-').toLowerCase();
 61             return new this.constructor(s);
 62         },
 63         between: function (left, right) {
 64             var s = this.s;
 65             var startPos = s.indexOf(left);
 66             var endPos = s.indexOf(right, startPos + left.length);
 67             if (endPos == -1 && right != null)
 68                 return new this.constructor('')
 69             else if (endPos == -1 && right == null)
 70                 return new this.constructor(s.substring(startPos + left.length))
 71             else
 72                 return new this.constructor(s.slice(startPos + left.length, endPos));
 73         },
 74         chompLeft: function (prefix) {
 75             var s = this.s;
 76             if (s.indexOf(prefix) === 0) {
 77                 s = s.slice(prefix.length);
 78                 return new this.constructor(s);
 79             } else {
 80                 return this;
 81             }
 82         },
 83         startWith: function () {
 84             var prefixes = [].slice.call(arguments, 0);
 85             if (this.s.indexOf(prefixes[0], 0) === 0) return true;
 86             return false;
 87         },
 88         endWith: function () {
 89             var prefixes = [].slice.call(arguments, 0),
 90                 pos = 0;
 91             while (pos !== -1) {
 92                 if (this.s.indexOf(prefixes[0], pos) === (this.s.length - prefixes[0].length)) return true;
 93                 pos = this.s.indexOf(prefixes[0], pos + prefixes[0].length);
 94             }
 95             return false;
 96         },
 97         chompRight: function (suffix) {
 98             if (this.endWith(suffix)) {
 99                 var s = this.s;
100                 s = s.slice(0, s.length - suffix.length);
101                 return new this.constructor(s);
102             } else {
103                 return this;
104             }
105         }
106     };
107 
108     window.G = GhostWu;
109 })(window, undefined);

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JavaScript入門幾個概念 ======================== 剛剛入門JavaScript的時候,搞懂DOM、BOM以及它們的對象document和window很有必要。 DOM是為了操作文檔出現的API,document是它的一個對象。 BOM是為了操作瀏覽器出現的API,w ...
  • node.js之調試器 1.在命令行視窗中,可以使用"node debug" 命令來啟用調試器,代碼如下: node debug 接下來根據一個實例進行學習調試過程: 編寫app.js文件進行調試: console.log('hello,word') function foo(){ console. ...
  • 1、我們希望在註冊頁面中添加一個欄位(籍貫),當用戶選擇一個具體的省份,在後面的下拉列表中動態載入該省份下所有的城市。顯示的效果如下: 2、步驟分析: 第一步:確定事件(onchange)併為其綁定一個函數 第二步:創建一個二維數組用於存儲省份和城市 第三步:獲取用戶選擇的省份 第四步:遍歷二維數組 ...
  • 寫在前面: 本人從事軟體開發方面三年了,一直是從事著.net開發,但是我個人熱衷於前端開發,由於開發經驗不足即使效勞過三家公司了也沒有真正去從事著前端開發這個職位,雖然如此但是我還是專註著前端開發的(哪怕現在還是半桶水)。為了繼續好好的學習前端開發就藉此博客記錄下學習的心路歷程,把一直以來所學的捋一 ...
  • [1]概述 [2]基本用法 [3]參數設置 [4]配置項 [5]動畫指令 [6]特色動畫 [7]高級用法 [8]UI插件 ...
  • 如果你對jquery比較熟悉的話,應該用過 eq, first, last, get, prev, next, siblings等過濾器和方法。本文,我們就用迭代設計模式來封裝實現,類似的功能 ...
  • 歡迎各位同學加入: React-Native群:397885169 大前端群:544587175 大神超多,熱情無私幫助解決各種問題。 我想我寫的這篇博文可以幫助到很多人,接下來要分享的東西,對app而言很重要,很常見,我先上圖,大家看效果! 為什麼我們要這麼做呢?這體現出對用戶的友好,當用戶第一次 ...
  • 學習資源: Angular官網(建議翻牆):https://angularjs.org Angular中文官網:https://angular.cn 菜鳥教程:http://www.runoob.com/angularjs2 官網Demo: 我的學習步驟是從官網教程的DEMO下手,完全跟隨教程一步一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...