正则表达式

113 阅读2分钟

小括号

正则表达式匹配的是一整个字符串,第一个括号中的模式匹配第一个子串,以此类推

  1. 基本格式
let str = 'abcdefg1234567'
console.log(str.match(/(a)(b)/)) // ['abc', 'a', 'bc', index: 0, input: 'abcdefg1234567', groups: undefined]
  1. 注意:这个子串是整个正则表达式匹配完得到的结果中的子串,而不是原字符串的子串
let str = 'abcdefg1234567'
console.log(str.match(/(a)(1)/)) // null
  1. match方法中,如果进行的是全局匹配,不会返回子串
let str = 'abcdefg1234567'
console.log(str.match(/(a)(b)/g)) // ['ab']

中括号

中括号是一个整体,中括号中的字符属于 的关系

  1. 如果不是全局匹配,那么中括号中找到第一个能匹配上的字符就没东西了
let str = 'abcdefg1234567'
console.log('abcdefg1234567'.match(/[-def]/)) // ['d', index: 3, input: 'abcdefg1234567', groups: undefined]
  1. 如果是全局匹配,能得到所有匹配上的字符
let str = 'abcdefg1234567'
console.log('abcdefg1234567'.match(/[-def]/g)) // ['d', 'e', 'f']

大括号

表示字符出现的次数

{1,5}——出现1到5次

{2,}——大于2次

{3}——等于3次

^

  1. 当不使用 ^ 时
'123'.match(/\d/g) // ['1', '2', '3']
含义为 全局匹配单个任意数字
  1. 使用了 ^ 的话
'123'.match(/^\d/g) // ['1']
含义为 匹配开头位置后的一个任意数字
  1. 注意,并不是从开头位置往后找的第一个数字,而是紧跟在开头位置后的一个数字
'qwe123'.match(/^\d/g) // null
这里是匹配不到的

$

  1. 当不使用 $ 时
'123'.match(/\d/g) // ['1', '2', '3']
含义为 全局匹配单个任意数字
  1. 使用了 $ 的话
'123'.match(/\d$/g) // ['3']
含义为 匹配末尾位置前的一个任意数字
  1. 注意,并不是从末尾位置往前找的第一个数字,而是紧邻在末尾位置前的一个数字
'123qwe'.match(/\d$/g) // null
这里是匹配不到的
  1. 这个$字符还有一个作用,可以改变正则匹配的方向,比如千分位分隔,由默认的从左到右到从右到左
'12345678'.replace(/(?!^)(?=(\d{3})+$)/g, ',') // "12,345,678"

当 ^ 和 $ 同时出现在正则表达式中

/123/.test(' 123 ') // true
这个只要字符串中含有123这个子串就行了 

/^123$/.test(' 123 ') // false
这个限制死了开头位置后面一定要跟着1,末尾位置前面一定要是3