带你读《现代Javascript高级教程》二十四、正则表达式的常见问题与练习(1)

简介: 带你读《现代Javascript高级教程》二十四、正则表达式的常见问题与练习(1)

二十四、正则表达式的常见问题与练习

正则表达式是面试中经常被提及的主题之一,但很多人在面试中对于正则表达式的问题常常感到困惑。在本节中,我将通过一些常见问题和练习题目来帮助你更好地理解和掌握正则表达式的技巧。

问题一:JavaScript 中的字符串与正则表达式操作

  1. 在 JavaScript 中,我们可以使用三个方法来操作字符串和正则表达式:testexec match。下面是它们的具体用法及括号在这些方法中的作用。

 

  1. RegExp.prototype.test(): test 是 JavaScript 中正则表达式对象的一个方法,用于检测正则表达式对象与传入的字符串是否匹配。如果匹配,则返回 true,否则返回 false。使用方法如下:

 

regexObj.test(str);

 

示例

 

/Jack/.test('ack'); // false

 

在 test 方法中,括号只起到分组的作用,例如:

 

/123{2}/.test('123123'); // false
/(123){2}/.test('123123'); // true

 

  1. String.prototype.match(): match 是字符串的方法,它接受一个正则表达式作为参数,并返回字符串中与正则表达式匹配的结果。在 match 方法中,括号的作用有两个:

 

  • 分组
  • 捕获。捕获的意思是将用户指定的匹配到的子字符串暂存并返回给用户。

当传入的正则表达式没有使用 g 标志时,返回一个数组。数组的第一个值为第一个完整匹配,后续的值分别为括号捕获的所有值,并且数组还包含以下三个属性:

 

  • groups:命名捕获组
  • index:匹配结果的开始下标
  • input:传入的原始字符串

示例:

 

const result1 = '123123'.match(/123{2}/); // nullconst result2 = '123123'.match(/(123){2}/); // ["123123", "123", index: 0, input: "123123", groups: undefined]
console.log(result2.index); // 0
console.log(result2.input); // 123123
console.log(result2.groups); // undefined

 

当传入的正则表达式有 g 标志时,将返回所有与正则表达式匹配的结果,忽略捕获。

 

  1. RegExp.prototype.exec(): exec 是正则表达式的方法,它接受一个字符串作为参数,并返回与正则表达式匹配的结果。返回结果是一个数组,其中包含了匹配到的信息。在 exec 方法中,括号的作用同样是分组和捕获。

 

  1. 当传入的正则表达式没有使用 g 标志时,每次调用 exec 方法都会返回第一个匹配结果的信息数组,包括匹配的字符串、分组捕获的值以及其他属性。

示例:

const regex = /(\d+)([a-z])/;const str = '123a';let result;
while ((result = regex.exec(str)) !== null) {
  console.log(result[0]); // 123a
  console.log(result[1]); // 123
  console.log(result[2]); // a
  console.log(result.index); // 0
  console.log(result.input); // 123a
  console.log(result.groups); // undefined
  regex.lastIndex = result.index + 1; // 设置下次匹配开始的位置}

当传入的正则表达式有 g 标志时,exec 方法将持续查找匹配的结果。

问题二:在正则表达式中匹配多个空格

有时候,我们希望匹配连续的多个空格,可以使用正则表达式中的特殊字符 \s。

示例:

 

const str = 'Hello    World';const regex = /\s+/;const result = str.split(regex);
console.log(result); // ["Hello", "World"]

 

在上述示例中,我们使用 \s+ 匹配连续的多个空格,并通过 split 方法将字符串分割成数组。结果中的多个空格被去除,只留下了单词。

问题三:在正则表达式中匹配邮箱地址

匹配邮箱地址是正则表达式中的一个常见需求。下面给出一个简单的匹配规则:

 

const regex = /^[A-Za-z0-9]+@[A-Za-z0-9]+\.[A-Za-z]{2,}$/;

 

这个正则表达式的意思是匹配由字母、数字组成的用户名,紧接着是一个 @ 符号,然后是由字母、数字组成的域名,最后是一个以两个或更多字母组成的顶级域名。

 

示例:

const email = 'example@example.com';const regex = /^[A-Za-z0-9]+@[A-Za-z0-9]+\.[A-Za-z]{2,}$/;
console.log(regex.test(email)); // true

 

在上述示例中,我们使用 test 方法检测邮箱地址是否符合正则表达式的规则。


带你读《现代Javascript高级教程》二十四、正则表达式的常见问题与练习(2)https://developer.aliyun.com/article/1349515?groupCode=tech_library

 

相关文章
|
2月前
|
移动开发 JavaScript 前端开发
JavaScript的正则表达式实现邮箱校验
JavaScript的正则表达式实现邮箱校验
56 1
|
17天前
|
存储 JavaScript 前端开发
JavaScript高级主题:JavaScript 中的 Map 和 Set 是什么?它们有什么区别?
JavaScript的ES6引入了Map和Set数据结构。Map用于存储键值对,适合通过键进行查找,而Set则存储唯一值,无键且不支持键查找。两者在性能上表现出色,尤其在频繁的写入删除操作中。选择使用哪个取决于具体应用场景:键值对需求选Map,独特值集合则选Set。
18 2
|
2月前
|
JavaScript 前端开发 Java
JavaScript高级笔记-coderwhy版本(六)
JavaScript高级笔记-coderwhy版本
74 0
|
2月前
|
JavaScript 前端开发 Java
JavaScript高级笔记-coderwhy版本(一)
JavaScript高级笔记-coderwhy版本
34 0
JavaScript高级笔记-coderwhy版本(一)
|
2月前
|
存储 JSON JavaScript
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-(三)
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-
40 1
|
2月前
|
JavaScript 前端开发 算法
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-(二)
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-
28 0
|
2月前
|
Web App开发 JavaScript 前端开发
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-(一)
JavaScript高级进阶(更新中)-javascript-gao-ji-jin-jie--geng-xin-zhong-
62 0
|
2月前
|
Windows Perl
Perl 教程 之 Perl 正则表达式 8
Perl的正则表达式是其强项,常用于字符串匹配、查找、替换等。基本操作包括:`.`匹配任意字符(除换行符),`x?`匹配0或1次`x`,`x*`匹配0或多次`x`,`x+`匹配1或多次`x`。还有范围匹配如`[0-9]`、否定匹配`[^a-z]`、边界匹配`\b`等。特殊序列如`\d`代表数字,`\s`代表空格,`()`用于记忆匹配内容,`/pattern/i`忽略大小写。
10 0
|
2月前
|
Perl
Perl 教程 之 Perl 正则表达式 7
Perl教程讲解了其强大的正则表达式功能,用于字符串匹配、查找、替换和提取。示例展示如何使用`/s`删除变量`$string`中的重复字符,输出结果为原字符串。其他实例包括将非数字字符替换为空格,删除tab和空格,以及将数字间字符替换为单个空格。
15 3
|
2月前
|
Perl
Perl 教程 之 Perl 正则表达式 6
**Perl正则表达式强大多能,常用于字符串匹配、替换和提取。转化操作符如`tr`用于字符转换,如将所有小写字母转大写:`$string =~ tr/a-z/A-Z/`。**
17 2