JS不再百度系列-字符串的基本操作
栏目: JavaScript · 发布时间: 6年前
内容简介:这篇记录的是我常用的字符串操作。本文全部内容来自注意:
这篇记录的是我常用的字符串操作。本文全部内容来自 MDN。 完整的可以看这个
注意:
- js的所有字符串方法均不会修改原字符串
String.prototype和Array.prototype中都有的方法
concat
返回值:新的拼接好的字符串
eg:
a = "a" a.concat([1,2]) //"a1,2" a.concat(1,true,null, undefined) //a1truenullundefined,各元素会先用String()处理转化成字符串复制代码
includes
语法:
str.includes(searchString[, position])
参数:
- searchString:要在此字符串中搜索的 字符串(可以是字符串,不一定是单个字符。indexOf和lastIndexOf同) ,如果不是字符串,会先用String()转为字符串,此点和Array中的includes的表现不一样
- position:可选。从当前字符串的哪个索引位置开始搜寻子字符串,默认值为0。不支持负数,若是负数则无意义,指定为负数等同于指定为0
eg:
a = ["1", "2", "3"]
a.includes(1) //false
b = "123"
b.includes(1) //true
a.includes("2", -1) //false
a.includes("2", -2) //true
b.includes("2", -1) //true
b.includes("2", -2) //true
b.includes("2", 1) //true
b.includes("2", 2) //false
复制代码
indexOf
用法基本和数组中的indexOf一样,支持两个参数。
第二个参数不支持负数,或者说当第二个参数是负数时,表现会比较复杂。但我个人认为这没有记忆的必要
如果 fromIndex < 0
则查找整个字符串( 如同传进了 0
)。如果 fromIndex >= str.length
,则该方法返回 -1。当被查找的字符串是一个空字符串, fromIndex <= 0
时返回 0
, 0 < fromIndex <= str.length
时返回 fromIndex
, fromIndex > str.length
时返回 str.length
。
lastIndexOf
第二个参数同样不支持负数。如果为负值,则被看作 0。如果 fromIndex > str.length
,则 fromIndex
被看作 str.length
总结:
个人觉得,使用String.prototype.includes/indexOf/lastIndexOf时,如果需要用到第二个参数,记得用正数表示就好,没必要使用负数,得不偿失
slice
语法和参数完全同Array,第二个参数同样支持负数
字符相关操作
charAt
定义:从一个字符串中返回指定位置的字符
返回值:一个字符
语法:
str.charAt(index = 0)
参数:
- index:一个介于0 和字符串长度减1之间的整数。 (0~length-1),默认为0。如果超过length-1,返回空字符;
charCodeAt
定义:方法返回0到65535之间的整数,表示给定索引处的UTF-16代码单元 (在 Unicode 编码单元表示一个单一的 UTF-16 编码单元的情况下,UTF-16 编码单元匹配 Unicode 编码单元。但在——例如 Unicode 编码单元 > 0x10000 的这种——不能被一个 UTF-16 编码单元单独表示的情况下,只能匹配 Unicode 代理对的第一个编码单元)
以我的理解,UTF-16编码方式固定以两个字节表示一个字符,两个字节即上文说的UTF-16编码单元。charCodeAt返回表示指定字符UTF-16编码单元的整数。但总有超出两个字节表示的字符,譬如有些字符需要四个字节表示,这时charCodeAt就返回第一个编码单元,即四个字节中的前两个字节
具体建议阅读阮一峰老师的:ES6入门
语法:
str.charCodeAt(index)
参数:
-
index,一个大于等于 0,小于字符串长度的 整数 。如果不是一个数值,则默认为 0
返回值:表示给定索引处(String中index索引处)字符的 UTF-16 代码单元值的 数字(Number)
;如果索引超出范围,则返回 NaN
codePointAt
定义:方法返回 一个 Unicode 编码点值的非负整数(可以识别大于双字节存储的字符)
返回值:表示Unicode编码点值的非负整数
截取操作
slice
参考上面
substr
先搬一下来自MDN的警告
警告: 尽管
String.prototype.substr(…)
没有严格被废弃 (as in "removed from the Web standards"), 但它被认作是遗留的函数并且可以的话应该避免使用。它并非JavaScript核心语言的一部分,未来将可能会被移除掉。如果可以的话,使用
substring()
替代它.
鉴于此,直接跳过至substring
substring
定义:返回一个字符串 在开始索引到结束索引之间的一个子集(新的字符串,包括开始索引不包括结束索引) , 或从开始索引直到 字符串的末尾(若省略第二个参数)的 一个子集
返回值:包含给定字符串的指定部分的新字符串
语法:
str.substring(indexStart[, indexEnd])复制代码
参数
- indexStart。需要截取的第一个字符的索引,该字符作为返回的字符串的首字母。
- indexEnd。可选。一个 0 到字符串长度之间的整数 (不支持负数 ,若是负数,返回空串 ) , 默认是str.length 。以该数字为索引的字符不包含在截取的字符串内。若是substr,该参数指定了要截取字符数
split 指定
支持正则的方法
match 检索字符串
定义:检索返回一个字符串匹配正则表达式的的结果
返回值:
语法: str.match(regexp)
参数:
- regexp
一个正则表达式对象。如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj)
将其转换为一个
RegExp
。如果你没有给出任何参数并直接使用match() 方法 ,你将会得到一 个包含空字符串的
Array
:[""] 。
返回值:
Array
),但不会返回捕获组,或者未匹配返回 null
。 Array
) ( 关联数组 )
。 在这种情况下,返回的项目将具有如下所述的 附加属性
,或者未匹配返回 null
。 附加属性
如上所述,匹配的结果包含如下所述的附加特性。
-
groups: 一个捕获组数组 或undefined(如果没有定义命名捕获组)。 -
index: 匹配的结果的开始位置 -
input: 搜索的字符串.
eg:
a = "12311"; a.match(/1/g); //["1", "1", "1"],不会返回捕获组 a.match(/8/g); a.match(/1/); //["1", index: 0, input: "12311", groups: undefined] a.match(/8/); //null 复制代码
总结一下返回值有三种情况:
- null,未匹配到
- 该字符串所有匹配正则表达式的结果组成的数组,可通过其得知字符串有多个个能匹配正则的子串,正则表达式有g标志的情况下
- 具有附加属性的捕获组(一个关联数组)
search 检索字符串
定义:执行正则表达式和
String
对象之间的一个搜索匹配
语法: str.search(regexp)
参数:
- regexp
返回值:如果匹配成功,则 search()
返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1
感觉像是支持正则的indexOf,不阐述更多
replace 替换
这个应用场景比较多
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design Accessible Web Sites
Jeremy Sydik / Pragmatic Bookshelf / 2007-11-05 / USD 34.95
It's not a one-browser web anymore. You need to reach audiences that use cell phones, PDAs, game consoles, or other "alternative" browsers, as well as users with disabilities. Legal requirements for a......一起来看看 《Design Accessible Web Sites》 这本书的介绍吧!