[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.mzph.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“你的膜法也救不了你 在去拯救公主的道路上,卿学姐披荆斩棘,刀刃早已锈迹斑斑。 一日卿学姐正在为武器的问题发愁,碰到了正…