在 ES10 中,JavaScript 新增了两个字符串方法:String.prototype.match 和 String.prototype.replaceAll。这两个方法可以让我们更方便地处理字符串,同时也提高了代码的可读性和效率。本文将详细介绍这两个方法的用法和实现原理,帮助读者更好地掌握它们的使用。
String.prototype.match
String.prototype.match 方法用于在字符串中查找一个或多个匹配的子串,并返回一个由匹配结果组成的数组。它的语法如下:
string.match(regexp)
其中,regexp 可以是一个正则表达式对象或者一个字符串。如果 regexp 是一个字符串,则它会被隐式转换为正则表达式对象。match 方法返回的数组包含所有匹配的子串,如果没有匹配的子串,则返回 null。
下面是一个示例代码:
const str = 'hello world'; const result = str.match(/l/g); console.log(result); // ['l', 'l']
在上面的代码中,我们使用 match 方法查找字符串 str 中所有的 'l' 字符,并返回一个数组 ['l', 'l']。
除了返回匹配的子串之外,match 方法还可以返回正则表达式的捕获组。如果在正则表达式中使用了捕获组,那么 match 方法会将每个捕获组的匹配结果作为一个子数组返回。例如:
const str = '2021-01-01'; const result = str.match(/(\d{4})-(\d{2})-(\d{2})/); console.log(result); // ['2021-01-01', '2021', '01', '01']
在上面的代码中,我们使用正则表达式 /(\d{4})-(\d{2})-(\d{2})/ 匹配日期字符串 str,它包含了三个捕获组,分别用于提取年、月、日。match 方法返回的数组包含了整个匹配结果和三个子数组,分别对应于三个捕获组的匹配结果。
String.prototype.replaceAll
String.prototype.replaceAll 方法用于在字符串中替换所有匹配的子串,并返回替换后的新字符串。它的语法如下:
string.replaceAll(searchValue, replaceValue)
其中,searchValue 可以是一个字符串或一个正则表达式对象,replaceValue 是一个字符串或一个函数。如果 searchValue 是一个字符串,则它会被视为一个普通字符串,替换所有匹配的子串。如果 searchValue 是一个正则表达式对象,则它会被用于匹配所有符合条件的子串。replaceValue 可以是一个字符串,其中可以包含 $1、$2 等占位符,用于表示匹配结果中的捕获组。replaceValue 也可以是一个函数,它会被调用一次或多次,用于生成替换的字符串。
下面是一个示例代码:
const str = 'hello world'; const result = str.replaceAll('l', 'L'); console.log(result); // 'heLLo worLd'
在上面的代码中,我们使用 replaceAll 方法将字符串 str 中所有的 'l' 替换为 'L',得到了新的字符串 'heLLo worLd'。
如果我们想要使用正则表达式进行替换,可以这样写:
const str = '2021-01-01'; const result = str.replaceAll(/(\d{4})-(\d{2})-(\d{2})/, '$2/$3/$1'); console.log(result); // '01/01/2021'
在上面的代码中,我们使用正则表达式 /(\d{4})-(\d{2})-(\d{2})/ 匹配日期字符串 str,然后使用占位符 $2、$3、$1 将年、月、日重新排列,得到了新的日期字符串 '01/01/2021'。
总结
ES10 中的 String.prototype.{match,replaceAll} 方法为我们提供了更方便、更高效的字符串处理方式。通过本文的介绍,读者可以更好地掌握这两个方法的用法和实现原理,从而在实际开发中更加灵活地运用它们。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/656729b1d2f5e1655d00d574