字符串截取函数slice, substring, substr
在日常项目需求中,常常会遇到需要截取字符串操作的工作,而ECMAScript为我们提供了原生的截取字符串的函数,而且提供了三个:slice, substring, substr。我们怎么判断在什么时候使用哪个字符串截取函数呢?
其实,只要搞清楚这三者的区别,就比较容易能够判断什么情况下,使用哪个字符串截取的函数了。
三者都是接受两个可选参数。
最简单的情况下,没有传入任何参数,则这三者没有任何区别,类似于=操作符,直接复制了一个字符串出来。
如果之传入一个参数,则直接取从参数开始到字符串结尾的字符串。遇到非正整数的参数,与两个参数的处理情况相同。
str.slice(start, end)
slice的参数start和end可接受任意非NaN数值的参数,取start到end之间的字符,不包含end。如果参数为负,则会自动加上str.length进行纠正,如果依然为负值,则修正为0。如果end值小于start则返回空字符串。
console.log("abcdefghij".slice(3,1)) // ''
console.log("abcdefghij".slice(-3,-1)) // 'hi'
console.log("abcdefghij".slice(1, 3)) // 'bc'
console.log("abcdefghij".slice(-20, -8)) // 'ab'
记住一个原则:如果end小于start,则返回空字符串。如果值为负数,加str.length纠正,依然为负,则调整为0。
str.substring(start, end)
也是接受任意数值的参数,如果参数为0或者NaN的话,会自动修正为0;如果end小于start的话,两者位置颠倒。取start到end之间的字符,不包含end。
console.log("abcdefghij".substring(3,1)) // 'bc'
console.log("abcdefghij".substring(-3,-1)) // ''
console.log("abcdefghij".substring(1, 3)) // 'bc'
console.log("abcdefghij".substring(-20, -8)) // ''
也有一个原则:就是两个参数当中较小的会自动调整当做start参数,任何非正整数,都会当做0处理。
str.substr(start, length)
从形参名称应该可以看出一点不同。substr第一个参数也是起始位置,但是第二个参数不是结束位置,而是需要截取多少个字符串。
start如果为负数,则与slice传入负数参数一样处理,让其自身加str.length进行纠正,如果还小于0,则当做0处理。
length如果为0或者负数,则直接返回一个空字符串。
console.log("abcdefghij".substr(-13)) // 'abcdefghij'
console.log("abcdefghij".substr(-13, 1)) // 'a'
console.log("abcdefghij".substr(0, -1)) // ''
console.log("abcdefghij".substr(-1, 3)) // 'j'
如此来看,就能够比较清楚的分辨出来三者之间的用法和区别了。
字符串截取函数slice, substring, substr的更多相关文章
- JS字符串截取函数slice(),substring(),substr()的区别
在JS中,slice().substring().substr()都有截取字符串的作用,那他们有哪些用法上的区别呢?如果你也有疑惑,这篇文章或许能够帮助到你. 一.substring() substr ...
- js字符串截取函数slice()、substring()、substr()
摘要 在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与 ...
- JavaScript中字符串截取函数slice()、substring()、substr()
在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与区别吧 ...
- 关于js的string的3个函数slice,substring,substr对比
slice,substring,substr三个函数都是截取字符串,但是对参数的处理有区别 参数处理相似的两个函数式slice和substring slice(start,end)和substring ...
- Mysql字符串截取函数SUBSTRING的用法说明
感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取字符串 left(str, length) 说明:le ...
- MySQL 字符串截取函数
MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() ...
- (实用篇)多个PHP中文字符串截取函数
字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到.虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了 <?php funct ...
- 改造phpcms-v9自带的字符串截取函数
1.phpcms-v9自带的字符串截取函数在phpcms/libs/functions/global.func.php文件中: /** * 字符截取 支持UTF8/GBK * @param $stri ...
- 收藏几个支持中文的PHP字符串截取函数
字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到.虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了. <?php func ...
随机推荐
- jdk源码剖析二: 对象内存布局、synchronized终极原理
很多人一提到锁,自然第一个想到了synchronized,但一直不懂源码实现,现特地追踪到C++层来剥开synchronized的面纱. 网上的很多描述大都不全,让人看了不够爽,看完本章,你将彻底了解 ...
- C#性能优化总结
1. C#语言方面 1.1 垃圾回收 垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意. 1.1.1 避免不必要的对象创建 由于垃圾回收的代价较高,所 ...
- 使用zlib来压缩文件-用delphi描述
今天用到压缩文件的问题,找了一些网上的资料,后来发现了delphi自身所带的zlib单元,根据例子稍微改变了一些,使它能够符合所有的格式. 使用时,需要Zlib.pas和 Zlibconst.pas两 ...
- MySQL 单条记录长度最大65535
今天设计表结构,加了几个字段,结果报错了 Ligne trop grande. Le taille maximale d'une ligne, sauf les BLOBs, est 65535... ...
- 黄聪:Android酷炫实用的开源框架(UI框架)(转)
Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...
- Flask--路由备忘
路由: 路由传参route("/index/<userid>") def index(userid),参数数据类型的指定route("user/<int ...
- Spark 在Hadoop HA下配置HistoryServer问题
我的Spark机群是部署在Yarn上的,因为之前Yarn的部署只是简单的完全分布式,但是后来升级到HA模式,一个主NN,一个备NN,那么Spark HistoryServer的配置也需要相应的做修改, ...
- Python 里面什么时候用一个=,什么时候用两个=
赋值用= i != j != k >>>> ...
- bzoj5050: 建造摩天楼
Description 属于小Q管辖的n座摩天楼从左往右排成一排,编号依次为1到n,第i座摩天楼的高度为h_i.小Q会进行m次以下两种 操作之一: 2 l r,询问h_l+h_{l+1}+...+h_ ...
- maven(一 基本操作 命令 标签)
原来一直没有使用maven 小公司,只是听说过这个东西,我没事就喜欢 去学习一些新东西.maven学了几次,但是 没有用上 所以 最后还是忘记了,或者说不知道怎么使用maven,一年半以前公司 改革 ...