• [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);
  • 相关阅读:
    模态对话框
    js小练习题
    js练习题
    python实现不同格式九九乘法表
    Python学习笔记之疑问12:什么是tuple
    Python学习笔记之疑问11:批量赋值
    Python学习笔记之疑问10:如何使用分隔符连接list中的字符串
    Python学习笔记之疑问 9:如何使用For语句
    Python学习笔记之疑问 8:Python 中的问号表达式
    Python学习笔记之疑问 7:自定义模块放在什么位置
  • 原文地址:https://www.cnblogs.com/ghostwu/p/7406565.html
Copyright © 2020-2023  润新知