js删除字符串最后一个字符_JS原生字符串查找(面试题)

题目要求只是用最近基本的循环,完成字符串a 与字符串b 的匹配

实例: let a = ‘ab’

let b = ‘wwwwabc’

func(a,b) => //4 否则返回 -1

要求:代码效率高,简介,可复用强,不能使用现有的方法replace,slice,split,正则等等

妈耶~~写了半天没保存,鬼使神差的在开发者工具内使用了document.write

0aaa1b215e13c562bc0ac8c1bad56a05.png

好吧,我再写一遍。

关于这个题目我是这么写的,如下:

/************************** 在不使用正则,slice,splice,replace等方法的情况下实现,判断字符串a 是否在字符串b内的方法,并返回在b中的索引 **********************************/ const match = (a, b) => { let arr = [] // 将字符串b拆分成数组 for (let i = 0; i < b.length; i++) { arr.push(b[i]) } let al = (a.length - 1) let idx = -1 for (let index = al; index < arr.length; index++) { // let str2 = arr[index -1] + arr[index] let str2 = _format(arr, index, al) if (str2 === a) { // alert(, str2) idx = index - 1 break } } return idx } function _format(arr, index, al) { // 入参为 arr => 需要匹配的数组 index=>开始匹配的索引 al=>将要匹配的字符串长度向前推al个索引,所以al是a字符串长度减一 let str = '' for (let i = al; i >= 0; i--) { str += arr[index - i] } return str } console.log(`匹配的结果是:${match('io', 'asasioasd')}`)

运行一下:

3bb26cfe56a56616c67a1a27dba0cc3c.png
a4e37a7a7e254a6b8e9ac35f70e48543.png

使用js方法实现上述问题

String对象的方法

方法一: indexOf() (推荐)

var str = "123";console.log(str.indexOf("3") != -1 ); // trueindexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1.indexOf 会直接返回索引,但是他只会返回第一次查找到的结果//例如 str = 'hahaha'str.indexOf('ha') ---> 0//处理了上述情况只需要将match方法改一下const match = (a, b) => { let arr = [] for (let i = 0; i < b.length; i++) { arr.push(b[i]) } let al = (a.length - 1) let idx = [] for (let index = al; index < arr.length; index++) { // let str2 = arr[index -1] + arr[index] let str2 = _format(arr, index, al) if (str2 === a) { // alert(, str2) idx.push(index - 1) } } return idx }console.log(`匹配的结果是:${match('ha', 'haheihaheiooaha')}`)// 匹配的结果是:0,5,13// 当然这个还是存在很大问题,处理的时候并没有将 ha 作为一个字段,这个嘛, 容我想想

方法二: search()

var str = "abcd";console.log(str.search("b")); // 1//search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回 -1,与indexOf一致

方法三:match()

match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。

stringObject.match(searchvalue)stringObject.match(regexp)

参数描述searchvalue必需。规定要检索的字符串值。regexp必需。规定要匹配的模式的 RegExp 对象。如果该参数不是 RegExp 对象,则需要首先把它传递给 RegExp 构造函数,将其转换为 RegExp 对象。

var str="Hello world!"document.write(str.match("world") + "
")---输出 world

多个返回

str = 'hahaha'reg = RegExp(/ha/g)---输出['ha',''ha,'ha']

正则匹配

var str = "abcd";var reg = RegExp(/b/g);console.log(reg.test(str)); // true

//exec()

var str = "abcd";var reg = RegExp(/a/);reg.exec(str) --- true

先这样吧,后期再补,写代码去了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值