javascript基础学习系列五十七:字符串位置方法

本文详细比较了JavaScript中的substr(),substring(),和slice()字符串截取方法,以及indexOf()和lastIndexOf()子字符串搜索方法,特别强调了负参数的处理和搜索范围的不同。
摘要由CSDN通过智能技术生成

而 substr()方法将第一个负参数值当成字符串长度加上该值,将第二个负参数值转换为 0。 12 substring()方法会将所有负参数值都转换为 0。

let stringValue = "hello world";
console.log(stringValue.slice(-3));
console.log(stringValue.substring(-3));
console.log(stringValue.substr(-3));
console.log(stringValue.slice(3, -4));
console.log(stringValue.substring(3, -4));  // "hel"
console.log(stringValue.substr(3, -4));     // "" (empty string)

这个例子明确演示了 3 个方法的差异。在给 slice()和 substr()传入负参数时,它们的返回结果 相同。这是因为-3 会被转换为 8(长度加上负参数),实际上调用的是 slice(8)和 substr(8)。而 substring()方法返回整个字符串,因为-3 会转换为 0。

在第二个参数是负值时,这 3 个方法各不相同。slice()方法将第二个参数转换为 7,实际上相当 于调用 slice(3, 7),因此返回"lo w"。而 substring()方法会将第二个参数转换为 0,相当于调用 substring(3, 0),等价于 substring(0, 3),这是因为这个方法会将较小的参数作为起点,将较 大的参数作为终点。

对 substr()来说,第二个参数会被转换为 0,意味着返回的字符串包含零个字符, 因而会返回一个空字符串。

有两个方法用于在字符串中定位子字符串:indexOf()和 lastIndexOf()。这两个方法从字符 串中搜索传入的字符串,并返回位置(如果没找到,则返回-1)。两者的区别在于,indexOf()方法 从字符串开头开始查找子字符串,而 lastIndexOf()方法从字符串末尾开始查找子字符串。来看下面 的例子:

let stringValue = "hello world";
    console.log(stringValue.indexOf("o"));     // 4
    console.log(stringValue.lastIndexOf("o")); // 7

这里,字符串中第一个"o"的位置是 4,即"hello"中的"o"。最后一个"o"的位置是 7,即"world" 中的"o"。如果字符串中只有一个"o",则 indexOf()和 lastIndexOf()返回同一个位置。

这两个方法都可以接收可选的第二个参数,表示开始搜索的位置。这意味着,indexOf()会从这个 参数指定的位置开始向字符串末尾搜索,忽略该位置之前的字符;lastIndexOf()则会从这个参数指 定的位置开始向字符串开头搜索,忽略该位置之后直到字符串末尾的字符。下面看一个例子:

   let stringValue = "hello world";
    console.log(stringValue.indexOf("o", 6));     // 7
    console.log(stringValue.lastIndexOf("o", 6)); // 4

在传入第二个参数 6 以后,结果跟前面的例子恰好相反。这一次,indexOf()返回 7,因为它从位 置 6(字符"w")开始向后搜索字符串,在位置 7 找到了"o"。

而 lastIndexOf()返回 4,因为它从位 置 6 开始反向搜索至字符串开头,因此找到了"hello"中的"o"。像这样使用第二个参数并循环调用 indexOf()或 lastIndexOf(),就可以在字符串中找到所有的目标子字符串,如下所示:

let stringValue = "Lorem ipsum dolor sit amet, consectetur adipisicing elit"; let positions = new Array();
let pos = stringValue.indexOf("e");
    while(pos > -1) {
      positions.push(pos);
      pos = stringValue.indexOf("e", pos + 1);
}
    console.log(positions); // [3,24,32,35,52]

这个例子逐步增大开始搜索的位置,通过 indexOf()遍历了整个字符串。首先取得第一个"e"的位 置,然后进入循环,将上一次的位置加 1 再传给 indexOf(),确保搜索到最后一个子字符串实例之后。 每个位置都保存在 positions 数组中,可供以后使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值