JS获取字符串指定位置字符⽅法(史上最全,绝对⼲货)这⾥以获取‘hello’字符串的第⼆个字符为例,⾸先我们定义⼀个变量: let str = 'hello'
⽅法⼀(字符串函数直接截取):
这是最常规的⽅法,这三个函数可以截取字符串,但⼜有所不同。slice 和substring 的第⼀⼊参和第⼆⼊参表⽰截取的起始位置和结束位置,但是slice的⼊参允许为负,例如str.slice(-2,-1)代表截取str的倒数第⼆位字符。⽽substr的第⼀⼊参和第⼆⼊参表⽰截取的起始位置和截取的长度。⼤家尽量避免使⽤substr了,因为这个并⾮标准。
regex匹配⽅法⼆(字符串可遍历特性):
字符串具有Iterator 接⼝,可以被f 循环遍历,所以也可以通过数组下标访问的形式获取指定下标的值。如str[1]就是本⽂的结果
⽅法三(解构赋值):
这⾥主要还是利⽤了字符串的数组特性,其次才是es6中解构赋值的写法,其中解构赋值的本质就是⼀个模式匹配,同时他允许左侧的其中⼀个模式匹配为空,所以我们才能拿到指定位置的字符。这种⽅式不推荐实际使⽤,只是展⽰⼀下有这种⽅法⽽已。以及说明⼀下解构的特点。
⽅法四(正则匹配中的⼦匹配项$1,$2......):
正则表达式在exec执⾏的时候,其中的⼦匹配表达式(⽤中括号包起来的就是⼦匹配表达式)的值会根据他们出现在正则表达式中的顺序分别赋值给RegExp的$1,$2...以此类推
⽅法五(正则匹配match结果):
字符串有match⽅法,结果是⼀个匹配的数组,RegExp实例的exec⽅法也返回了⼀个数组,其中数组中的第⼀个值表⽰整个正则表达式匹配的值,数组中的第⼆个值表⽰第⼀个⼦匹配表达式匹配的值,数组中的第三个值表⽰第⼆个⼦匹配表达式匹配的值,以此类推
⽅法六(正则具名匹配):
这和解构赋值⼀样是es6的新特性。这个相当于⼿动将⼦匹配表达式匹配到的值赋值给了⼀个你指定的变量上,⽽不再是RegExp上的$1,$2....上。注意写法就⾏: (?<var>), 你的所有具名项都会被添加到groups中,如果配合解构赋值,取值⽅式会更具可读性。
⼩结:
在上⾯⼏种⽅法中,⽅法⼆(字符串可遍历特性)是最简单的,毕竟取值⽅式和数组⼀样,也是最容操作的。⽅法⼀(字符串函数直接截取)和 ⽅法六(正则具名匹配)也不错,这两种⽅法对于字符串获取任意位置的字符可以有更好的应变性。⽅法⼀只需要改变截取起始位置和结束位置就⾏,⽅法六只需要改变⼀下正则表达式就可以,例如现在我们需要获取‘hello’的第三个字符正则表达式如下: /.{2}(?
<third>.)/。对于任何字符串的截取问题正则匹配都是可以做到的,同时$1,$2....的存在⼜给获取⼦匹配表达式的匹配值提供了捷径。
其余的⽅法只是提供了⼀种取值的可能性。如果后期出现新的⽅法,本⽂还会持续更新。零散的知识⽐较容易被遗忘,如果能通过某种⽅式(例如本⽂通过⼀个简单的⼩问题汇总不同知识点)组织成⼀颗知识树,那么你的技术累积会⽐较耐磨。学也⽆涯,唯上下⽽求索。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论