不要再混淆js的substring和substr了!

本文详细介绍了JavaScript中的字符串操作方法,重点对比了substring和substr的区别及用法,包括特殊情况下的表现。此外,还提供了其他常用字符串方法如concat、indexOf等的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、字符串操作方法

js中字符串方法操作有很多:concat、indexOf….
这里只要介绍两种经常混淆的字符串截取方法:substringsubstr

二、从例子入手
let str = 'xiaobe'
//substring(start,end)
let str1 = str.substring(1,2);

//substr(start,length)
let str2 = str.substr(1,2);

console.log(str1);  //i
console.log(str2);  //ia

可以看到str1输出的长度为1,str2输出长度为2.

substring

概念:返回字符串的一个子串,传入参数是起始位置和结束位置。

不取结束位置的字符

substr

返回字符串的一个子串,传入参数是起始位置和长度

substr是根据长度取值,所以上面例子,两个方法虽然参数相同,但是返回值不同

三、特殊情况
substring
  1. 仅有一个入参
let str = 'xiaobe'
let str1 = str.substring(1);
console.log(str1);  //iaobe

当只有一个入参的时候,会自动输出后面所有字符

  1. 入参的start>end
let str = 'xiaobe'
let str1 = str.substring(3,1);
console.log(str1);  //ia

当读取位置大于结束位置的时候,substring会自动调整位置

  1. 如果end为负数
let str = 'xiaobe'
let str1 = str.substring(3,-1);
console.log(str1);  //xia

当end为负数的时候,substring会输出start之前的字符

注意,start的最后一位依然是不会取到的

substr
  1. end为负数
let str = 'xiaobe'
let str1 = str.substring(3,-1);
console.log(str1);  // 

substr会输出空。毕竟length为负数,自然不会输出东西

四、扩展

其实substring和substr的关系与slice和splice关系相似

slice(start,end)

用法和substring类似,取值:[start,end)

//当end为负数时候
let str = 'xiaobe'
let str3 = str.slice(1,-1);
console.log(str3)   //iaobe

substring会倒序输出,而slice会输出后续全部

slice方法可用于字符串和数组

下面介绍一个和slice方法很像的方法,但是这个方法仅仅使用于数组

splice(start,length,item1,item2….)
参数描述
start必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置
length必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1…itemX可选。向数组添加的新项目。

splice会改变原数组 slice不会。

五、js字符串方法大全

转载:https://www.cnblogs.com/l1pe1/p/6197371.html

  • concat
将两个或多个字符的文本组合起来,返回一个新的字符串。
var a = "hello";
var b = ",world";
var c = a.concat(b);
alert(c);
//c = "hello,world"
  • indexOf
//返回字符串中一个子串第一处出现的索引(从左到右搜索)。如果没有匹配项,返回 -1 。
var index1 = a.indexOf("l");
//index1 = 2
var index2 = a.indexOf("l",3);
//index2 = 3
  • charAt
//返回指定位置的字符。
var get_char = a.charAt(0);
//get_char = "h"
lastIndexOf
返回字符串中一个子串最后一处出现的索引(从右到左搜索),如果没有匹配项,返回 -1var index1 = lastIndexOf('l');
//index1 = 3
var index2 = lastIndexOf('l',2)
//index2 = 2
  • match
//检查一个字符串匹配一个正则表达式内容,如果么有匹配返回 null。
var re = new RegExp(/^\w+$/);
var is_alpha1 = a.match(re);
//is_alpha1 = "hello"
var is_alpha2 = b.match(re);
//is_alpha2 = null
  • substring
//返回字符串的一个子串,传入参数是起始位置和结束位置。
var sub_string1 = a.substring(1);
//sub_string1 = "ello"
var sub_string2 = a.substring(1,4);
//sub_string2 = "ell"
  • substr
//返回字符串的一个子串,传入参数是起始位置和长度
var sub_string1 = a.substr(1);
//sub_string1 = "ello"
var sub_string2 = a.substr(1,4);
//sub_string2 = "ello"
  • replace
//用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。
var result1 = a.replace(re,"Hello");
//result1 = "Hello"
var result2 = b.replace(re,"Hello");
//result2 = ",world"
  • search
//执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。
var index1 = a.search(re);
//index1 = 0
var index2 = b.search(re);
//index2 = -1
  • slice
//提取字符串的一部分,并返回一个新字符串(与 substring 相同)。
var sub_string1 = a.slice(1);
//sub_string1 = "ello"
var sub_string2 = a.slice(1,4);
//sub_string2 = "ell"
  • split
通过将字符串划分成子串,将一个字符串做成一个字符串数组。
var arr1 = a.split("");
//arr1 = [h,e,l,l,o]
length
返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。
var len = a.length();
//len = 5
  • toLowerCase
//将整个字符串转成小写字母。
var lower_string = a.toLowerCase();
//lower_string = "hello"
toUpperCase
将整个字符串转成大写字母。
var upper_string = a.toUpperCase();
//upper_string = "HELLO"
<think>好的,我现在需要处理用户的问题,关于substrsubstring_index的区别用法。首先,我得确认用户提到的这两个函数分别属于哪种编程语言,因为不同语言中的函数可能有不同的行为。用户之前的问题是关于JavaScript中的substrsubstring,但现在提到了substring_index,这听起来像是MySQL中的函数。因此,我需要先确认substring_index的来源。没错,substring_index确实是MySQL中的字符串函数,用于根据分隔符截取子串。而substr在多种语言中存在,比如JavaScriptMySQL,但用户现在可能是在MySQL的上下文中提问,或者混合了不同语言的情况。接下来,我需要区分这两个函数的用途参数。substr通常用于截取指定位置长度的子串,比如在JavaScript中,substr(start, length),而在MySQL中,SUBSTR(str, start, length)。而substring_index则是MySQL特有的,用于按分隔符分割字符串并返回部分内容,例如SUBSTRING_INDEX(str,delimiter,count),count为正数表示从左开始取,负数则从右。 用户可能混了不同语言中的函数,或者想了解在MySQL环境下两者的区别。需要明确说明它们的不同应用场景:substr用于位置长度截取,substring_index用于基于分隔符的截取。同时,要给出具体示例,帮助用户理解。 还要检查之前的引用内容,用户提供的引用1到4都是关于JavaScript的substrsubstring,但当前问题涉及substring_index,所以需要补充MySQL的相关知识,并指出两者的不同之处。确保回答结构清晰,分点说明区别、参数、应用场景,并提供代码示例。最后,生成相关问题时要涵盖两者的使用场景、参数差异、在MySQL中的替代方法,以及常见错误,帮助用户深入理解。</think>### substrsubstring_index的区别及用法 #### 1. **功能定位不同** - **`substr`**:通用字符串截取函数,**根据位置长度**截取子字符串。例如: - JavaScript中:`str.substr(startIndex, length)`[^3] - MySQL中:`SUBSTR(str, start, length)`(与编程语言类似) - **`substring_index`**:**MySQL特有函数**,根据**分隔符**截取子字符串。例如: ```sql SELECT SUBSTRING_INDEX('www.example.com', '.', 2); -- 返回'www.example' SELECT SUBSTRING_INDEX('www.example.com', '.', -1); -- 返回'com' ``` #### 2. **参数设计差异** | 函数 | 参数含义 | |--------------------|--------------------------------------------------------------------------| | `substr` | `start`(起始位置,可为负数表示倒数位置)、`length`(截取长度)[^3] | | `substring_index` | `str`(原字符串)、`delimiter`(分隔符)、`count`(截取段数,正负控制方向) | #### 3. **应用场景对比** - **`substr`**适合: - 已知子串的**起始位置长度**(如提取手机号后4位) ```sql SELECT SUBSTR('13812345678', 8, 4); -- 返回'5678' ``` - **`substring_index`**适合: - 处理**结构化字符串**(如URL、文件路径) ```sql SELECT SUBSTRING_INDEX('/home/user/documents/file.txt', '/', 3); -- 返回'/home/user' ``` #### 4. **典型示例** - **混合使用场景**(MySQL中): ```sql -- 提取邮箱域名部分(先按@分割,再取后半部分) SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('user@example.com', '@', -1), '.', 1); -- 返回'example' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值