2024前端面试题库 - 正则表达式

291 阅读2分钟

知识点

常见的正则表达式分类:

  1. 匹配字符:

    • 字面量匹配:例如 /abc/ 匹配字符串中的 "abc"。
    • 字符类:例如 /[a-z]/ 匹配小写字母。
    • 反义字符类:例如 /[^0-9]/ 匹配非数字字符。
    • 转义字符:例如 /./ 匹配句点字符。
  2. 位置匹配:

    • 开始和结束匹配:例如 /^abc/ 匹配以 "abc" 开头的字符串。
    • 单词边界匹配:例如 /\bword\b/ 匹配单词 "word"。
    • 忽略大小写匹配:例如 /pattern/i 匹配不区分大小写的 "pattern"。
  3. 重复和数量限定:

    • 重复次数:例如 /a{2,4}/ 匹配连续出现 2 到 4 次的 "a"。
    • 零次或更多次:例如 /a*/ 匹配零个或多个 "a"。
    • 一次或更多次:例如 /a+/ 匹配一个或多个 "a"。
    • 零次或一次:例如 /a?/ 匹配零个或一个 "a"。
  4. 分组和捕获:

    • 分组:例如 /(abc)/ 创建一个分组来匹配 "abc"。
    • 捕获:例如 /(\d+)/ 在匹配的文本中捕获一串数字。
  5. 反向引用:

    • 反向引用:例如 /([a-z])\1/ 匹配连续重复的小写字母。
  6. 预查:

    • 正向预查:例如 /(?=pattern)/ 匹配紧跟着某个模式的位置。
    • 负向预查:例如 /(?!pattern)/ 匹配不紧跟着某个模式的位置。

题目

1. 驼峰转换

给一个连字符串例如:get-element-by-id转化成驼峰形式。

str.replace(/-\w/g, ($0) => { return $0.slice(1).toUpperCase(); })

2. 匹配数字

  • 二进制
/^[01]$/g.test('01010101')
  • 非零的十进制
/^[1-9][0-9]?$/g.test('29')
  • 月份
/^(0?[1-9]|1[0-2])$/.test('12')
  • 固定电话号码
/\(?0\d{2}[) -]?\d{8}/g.test("000-12344562")

(? 匹配左括号一次或0次然后以0开头后面加两个数字,再匹配右括号或空格或减号一次或0次,随后匹配8个数字

  • 非负整数
/^\d+$/g.test("101")

3. ip地址

/(?:\d{1,3}.){3}\d{1,3}/.test('192.168.0.1')

(?:) 是非捕获分组的语法。它用于创建一个子模式,在匹配过程中不会被保存到结果中的匹配组中

4. 标签

  • a标签
/<a[^>]+>/g.test("<a herf='www.baidu.com'>")
  • 标签
/<[^<>]+/g.test("<a herf='www.baidu.com'>")

5. 千分位

"12345678901".replace(/(\d)(?=(\d{3})+$)/g, '$1,')

(?=...) 是一个特殊的语法,表示正向预查(positive lookahead)。它用于在匹配位置之后,断言该位置后面的内容满足某种条件。

6. 密码

由数字、26个英文字母或者下划线组成的字符串

/^[0-9a-zA-Z_]{1,}$/g.test("111ww_")

6. trim

首尾空格去掉

"  111 ".replace(/^\s+|\s+$/g, '')