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

本文,我們接著之前的框架繼續擴展,這次擴展了一共有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);

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455298.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ffmpeg和SDL學習筆記

根據ffmpeg官方網站上的例子程序開始學習ffmpeg和SDL編程。 SDL是一個跨平臺的多媒體開發包。適用于游戲,模擬器,播放器等應用軟件開發。支持linux 、win32 等操作系統。 主要應用: 視頻 設置8bpp或更高的任意色彩深度的視頻模式。如果某個…

百練-16年9月推免-B題-字符串判等

2743:字符串判等 查看提交統計提示提問總時間限制: 1000ms內存限制: 65536kB描述判斷兩個由大小寫字母和空格組成的字符串在忽略大小寫,且忽略空格后是否相等。 輸入兩行,每行包含一個字符串。輸出若兩個字符串相等,輸出YES,否則輸…

mysql中的內置函數

mysql內置函數列表可以從mysql官方文檔查詢,這里僅分類簡單介紹一些可能會用到的函數。 1 數學函數 abs(x) pi() mod(x,y) sqrt(x) ceil(x)或者ceiling(x) rand(),rand(N):返回0-1間的浮點數,使用不同的seed N可以獲得不同的隨機數 round(x, D)&#xff…

待整理

CNN 適合處理圖片類輸入數據,單獨的,數據之間沒有關系。 rnn則適合處理序列類數據,視頻幀,語言。 深度神經網絡一般指隱藏層大于2的神經網絡。深層網絡相對于淺層網絡,表達能力更強。僅有一個隱藏層的神經網絡就能擬合…

希爾伯特變換_學習筆記1-傅里葉變換1

最終目標是解微分方程。第一章首先介紹了一般意義下的傅里葉變換,之后逐漸將傅里葉變換的概念抽象化,將變換的定義域進行拓展。最后少量介紹傅里葉變換在偏微分方程中的應用。習題解答是自己寫的,有的不會,有的不知道對不對。傅里…

使用 sitemesh/decorator裝飾器裝飾jsp頁面(原理及詳細配置)

摘要:首先這個Decorator解釋一下這個單詞:“裝飾器”,我覺得其實可以這樣理解,他就像我們用到的Frame,他把每個頁面共有的東西提煉了出來,也可能我們也會用各種各樣的include標簽,將我們的常用頁…

FFPLAY的原理(一)

概要電影文件有很多基本的組成部分。首先,文件本身被稱為容器Container,容器的類型決定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接著,你有一組流,例如,你經常有的是一個音頻流和一個視頻流。&…

安卓開發 新浪微博share接口實現發帶本地圖片的微博

1.微博share接口 在開始之前,我們先看一下要用到的這個接口: 我們這次是要上傳本地圖片,可以很明確的知道,除了要用POST方式提交請求,還要采用multipart/form-data編碼方式。 那么這個multipart/form-data編碼方式是什…

python編寫裝飾器_我也來寫一下python裝飾器

有借用,但原文出處已經找不到了,根據筆記分享一下解釋器的基礎。下面的代碼表示,等待兩秒鐘,輸出‘test is running。現在要求增加統計程序運行時間的功能。等待兩秒鐘,輸出‘test is running,現要求增加統計程序運行時…

VirtualBox安裝Centos6.8出現——E_INVALIDARG (0x80070057)

VirtualBox使用已有的虛擬硬盤出錯: 問題描述:UUID已經存在 Cannot register the hard disk E:\system_iso\centos6.8.vdi {05f096aa-67fc-4191-983d-1ed00fc6cce9} because a hard disk E:\system_iso\centos68_02\centos6.8.vdi with UUID {05f096aa-6…

DFT 與 ATPG綜 述

DFT 可測試性設計 工程會接觸 DFT。需要了解 DFT 知識,但不需要深入。 三種基本的測試(概念來自參考文檔): 邊界掃描測試:Boundary Scan Test: 測試目標是 IO-PAD,利用 JTAG 接口互連以方便 測試。&#x…

非線性動力學_非線性動力學特輯 低維到高維的聯通者

序言: 本文將以維度為主線, 帶量大家進入非線性動力學的世界。 文章數學部分不需要全部理解, 理解思維方法為主非線性動力學,是物理學的思維進入傳統方法所不能解決的問題的一座豐碑。它可以幫助我們理解不同復雜度和時間空間尺度…

Go語言channel與select原理

本文會嘗試解釋 go runtime 中 channel 和 select 的具體實現,部分內容來自 gophercon2017。Go版本為1.8.3channel 第一部分講述一下 channel 的用法。channel 可以看做一個隊列,用于多個goroutine之間的通信,例如下面的例子,一個…

Xadmin添加用戶小組件出錯

環境: Python 3.5.6 Django 2.1 Xadmin 原因: render函數在django2.1上有變化 解決方案: 1.在Python終端輸入命令help(xadmin) 查看xadmin安裝位置 得到如下輸出 FILE/root/anaconda3/envs/learndjango/lib/python3.5/site-packages/xad…

成本預算的四個步驟_全網推廣步驟有哪些?

全網推廣的步驟是什么?一般來說,搜索引擎優化是大多數中小企業常用的推廣方法。主要是通過對一些搜索引擎的排名來提高網站的曝光率,從而更好的提高自己網站的流量,從而更好的實現互聯網層面的銷售。接下來,讓我們學習…

undefined reference to `std::cout'等錯誤

(1)gcc和g都是GNU(組織)的一個編譯器。 (2)后綴名為.c的程序和.cpp的程序g都會當成是c的源程序來處理。而gcc不然,gcc會把.c的程序處理成c程序。 (3)對于.cpp的程序,編譯可以用gcc/g…

FFPLAY的原理(二)

關于包Packets的注釋從技術上講一個包可以包含部分或者其它的數據,但是ffmpeg的解釋器保證了我們得到的包Packets包含的要么是完整的要么是多種完整的幀。現在我們需要做的是讓SaveFrame函數能把RGB信息定稿到一個PPM格式的文件中。我們將生成一個簡單的PPM格式文件…

python生成requirements.txt的兩種方法

python項目如何在另一個環境上重新構建項目所需要的運行環境依賴包? 使用的時候邊記載是個很麻煩的事情,總會出現遺漏的包的問題,這個時候手動安裝也很麻煩,不能確定代碼報錯的需要安裝的包是什么版本。這些問題,requi…

node.js 安裝使用http-server

node.js npm全局安裝了http-server后我該怎么使用它?我在它的安裝目錄下創建了inde.html,瀏覽器localhost:8080可以訪問,那我的項目需要放在它的安裝目錄下?還是需要在我的項目下配置什么或者使用什么指令啟動它?我在我…

D - 卿學姐與魔法

卿學姐與魔法 Time Limit: 1200/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status“你的膜法也救不了你 在去拯救公主的道路上,卿學姐披荊斬棘,刀刃早已銹跡斑斑。 一日卿學姐正在為武器的問題發愁,碰到了正…