02-子字符串匹配和替换
17.1 子字符串匹配和替换
正则表达式的本质是匹配一个字符串的子字符串,或者替换该子字符串。它将以难以想象的强大功能和灵活性来帮助程序员完成这件事,所以在开始进一步学习之前,先简单地过一下 String.prototype 的非正则搜索和替换功能,该功能可以满足一些非常基本的搜索和匹配需求。
如果只想知道某个子字符串是否包含在一个更大的字符串中,下面的 String.prototype 方法就可以实现:
const input = "As I was going to Saint Ives";
input.startsWith("As") // true
input.endsWith("Ives") // true
input.startsWith("going", 9) // true – 从下标9开始
input.endsWith("going", 14) // true – 将下标14当做字符串的结尾
input.includes("going") // true
input.includes("going", 10) // false – 从下标10开始
input.indexOf("going") // 9
input.indexOf("going", 10) // -1
input.indexOf("nope") // -1
注意,这里的所有方法都区分大小写。所以 input.startsWith("as") 会返回fasle。如果不想区分大小写,将输入转化成小写即可:
input.toLowerCase().startsWith("as") // true
还要注意,上面的语句并没有改变原始字符串; String.prototype.toLowerCase 会返回一个新字符串,而不会修改原始字符串(记住,在JavaScript中,字符串是不可变的)。
如果想做进一步操作,比如替换掉刚才匹配到的子字符串,可以使用 String.prototype.replace :
const input = "As I was going to Saint Ives";
const output = input.replace("going", "walking");
同样,原始字符串(input)没有被这个替换语句修改。替换后,在output这个新字符串中,“going”已经被替换为“walking”(当然,如果真的想更改input的值,可以将替换后的值再赋给 input )。