js 简单判断字符在另一个字符串中出现次数 两种方法

本文介绍了两种在JavaScript中获取字符串部分的方法:1. 使用split()方法通过点号('.')分割字符串,获取二级域名的长度;2. 利用正则表达式匹配特定字符(如't'),计算其在字符串中出现的次数。这些技巧在前端开发中常用于处理URL或字符串解析。

1. 通过分割获取长度原理

var s = 'www.jb51.net';
var n = (s.split('.')).length-1;
alert(n); //弹出2

2. 通过正则实现

function patch(re,s){
  	re=eval("/"+re+"/ig")
  	return s.match(re).length;
}
var s = 'tools.jb51.net';
alert(patch('t',s)); //弹出2
<think>题目要求:使用箭头函数统计一个字符串一个字符串中出现次数。 思路: 1. 我们可以使用字符串的indexOf方法,通过循环查找子串出现的位置,每次找到一个后,将查找位置更新为当前找到位置的下一个位置,直到找不到为止。 2. 也可以使用正则表达式配合match方法,但要注意转义,因为字符串中可能有特殊字符。 这里我们使用第一种方法,因为更直观,且不涉及转义问题。 具体步骤: - 定义一个箭头函数,接收两个参数:主字符串str和要查找的子字符串sub。 - 初始化一个计数器count=0,以及当前位置startIndex=0。 - 使用while循环,每次在str中从startIndex位置开始查找sub。 - 如果找到(indexOf返回非-1),则计数器加1,然后更新startIndex为找到位置的下一个位置(即index + 1)。 - 如果没找到,则跳出循环。 - 返回计数器的值。 注意:如果子字符串为空,应该如何处理?我们可以返回0,或者根据具体情况,比如认为空字符串在主字符串中出现的次数为主字符串长度加1?但题目没有明确,通常我们会返回0,或者按照实际需求。这里我们按照常规做法,当子字符串为空时,返回0。 但是,我们也可以参考标准行为:在JavaScript中,如果子字符串为空,那么indexOf会返回0(从0开始找到空字符串),这样就会导致无限循环。因此我们需要处理空字符串的情况。 我们可以这样处理:如果sub为空,则返回0。或者也可以按照标准字符串匹配的规则,例如"abc".split("")会返回4个位置(包括开始和结束的位置)?但这里我们要求是出现次数,通常空字符串不应该计数。所以我们直接返回0。 代码实现: </think>以下是使用JavaScript箭头函数统计一个字符串一个字符串中出现次数的实现方案: ```javascript const countOccurrences = (str, sub) => { if (sub === '') return 0; let count = 0; let position = -1; while ((position = str.indexOf(sub, position + 1)) !== -1) { count++; } return count; }; // 使用示例 const mainString = "apple banana apple orange apple"; const searchString = "apple"; console.log(countOccurrences(mainString, searchString)); // 输出: 3 ``` ### 代码解释: 1. **箭头函数定义**:`const countOccurrences = (str, sub) => {...}` 使用箭头函数接收两个参数:主字符串`str`和子字符串`sub` 2. **空子串处理**:`if (sub === '') return 0;` 处理子串为空的情况,避免无限循环 3. **核心查找逻辑**: - `str.indexOf(sub, position + 1)` 从上次找到位置后开始查找 - `while`循环在每次找到子串时递增计数器`count` - 当`indexOf`返回`-1`时停止循环 4. **时间复杂度**:O(n),n是主字符串长度,因为需要遍历整个字符串 ### 关键点说明: - `indexOf`的第二个参数指定搜索起始位置,确保找到所有重叠出现(如"aaa"中找"aa"会找到2次) - 处理了边界情况:空子串、子串比主串长、大小写敏感(如需不敏感可添加`.toLowerCase()`) ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OOObject

你的鼓励是我创作的最大源泉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值