1. 什么是正则表达式

正则表达式是一种用来匹配字符串的强有力的工具,它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,就认为是匹配的。

在JavaScript中,正则表达式是对象,通常用来检索、替换那些符合某个模式的文本。匹配(验证表单)、替换(过滤敏感词)、提取(爬虫)等。

2.语法

定义正则表达式

1
2
3
4
5
const str = 'hello world'
// 1. 字面量定义:`/正则表达式/修饰符`
const reg = /hello/
// 2. 构造函数定义:`new RegExp('正则表达式', '修饰符')`
const reg = new RegExp('hello')

判断字符串是否符合规则

1
console.log(reg.test(str)) // true

检索(查找)符合规则的字符串

1
regObj.exec(str) // 返回一个数组,包含匹配的字符串,index,input

3.元字符

  • 普通字符:字母、数字,仅仅描述字符本身。
  • 元字符:具有特殊含义的字符,用来描述字符的组合规则,比如26字母可以写成[a-z]

🦮边界符

表示位置,开头和结尾,必须用什么开头,用什么结尾。

  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。
  • 比如:/^hello$/表示字符串必须是hello,或者/^hello/表示字符串必须以hello开头,/hello$/表示字符串必须以hello结尾。

🦮量词

描述字符出现的次数。

  • *:匹配前一个字符0次或多次,比如/a*/可以匹配'''a''aa'等。
  • +:匹配前一个字符1次或多次,比如/a+/可以匹配'a''aa''aaa'等。
  • ?:匹配前一个字符0次或1次,比如/a?/可以匹配'''a'
  • {n}:匹配前一个字符n次,比如/a{3}/可以匹配'aaa'
  • {n,}:匹配前一个字符至少n次,比如/a{3,}/可以匹配'aaa''aaaa'
  • {n,m}:匹配前一个字符n到m次,比如/a{3,5}/可以匹配'aaa''aaaa''aaaaa'

🦮字符类

  • []:匹配方括号中的任意一个字符。
  • [^]:匹配除了方括号中的任意一个字符。
  • -:连字符,表示范围,比如[a-z]表示26个小写字母。
  • \d:匹配任意一个数字,等价于[0-9]
  • \D:匹配任意一个非数字,等价于[^0-9]
  • \w:匹配任意一个字母、数字、下划线,等价于[a-zA-Z0-9_]
  • \W:匹配任意一个非字母、数字、下划线,等价于[^a-zA-Z0-9_]
  • \s:匹配任意一个空白字符,包括空格、制表符、换行符等。
  • \S:匹配任意一个非空白字符。
  • .:匹配除了换行符之外的任意一个字符。

4.修饰符

修饰符约束正则执行的某些细节行为,如是否区分大小写、是否多行匹配等。

  • i:忽略大小写。
  • g:全局匹配,匹配所有符合规则的字符串。
  • m:多行匹配,匹配每一行的开头和结尾。
  • s:单行匹配,.可以匹配换行符。
  • u:Unicode模式,处理大于\uFFFF的Unicode字符。
  • y:粘连模式,匹配从上次匹配的位置开始。
    例如:
    1
    const reg = /hello/gi  // 忽略大小写,全局匹配
  • .replace()方法,替换字符串,第一个参数是正则表达式,第二个参数是要替换的字符串
    1
    2
    3
    const str = 'hello world'
    const result = str.replace(/hello/, 'hi') // 又发返回值,不会改变原字符串,并且只会替换第一个匹配到的字符串
    const result2 = str.replace(/hello/g, 'hi') // 全局匹配,会替换所有匹配到的字符串

    |:或者,匹配多个规则中的一个。’