JavaScript正则表达式

107 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

什么是正则表达式

正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript 中,正则表达式也是对象(RegExp)。

这些模式可以判断字符串是否符合要求,也可以从字符串中获取到先要的部分,限制输入框内输入的内容。

创建正则表达式

字面量

通过两个/包裹

let reg = /abc/

new RegExp()

let reg = new RegExp('abc')

常用的正则表达式

断言

边界 表明字符串的起始或终止部分 边界类断言

  • ^ 匹配
  • 开头 /^a/ 表示要以a开头,可以匹配and 而不能匹配 nad
  • $ 匹配结束 /d$/ 表示要以d结尾,可以匹配and 而不能匹配adn
  • \b 匹配一个单词的边界,\b 的位置表示 要是空格或者空白
  • \B 匹配非单词边界,在\B 前后是同一类型,在两个字母之间,或者在两个空格之间

其它断言, 这些都没怎么用过 想要了解参考MDN

  • x(?=y)
  • (x?1y)
  • (?<=y)x
  • (?<!y)x

字符类

用于区分各种字符

  • [abc] 匹配在方括号中的任何字符,在[]中不需要使用|表示。例如 /[abc]/可以匹配 father 中的a,可以匹配到bca中的b
  • [a-z] 使用连字符-表示从a到z的字符,/[abc]/==/[a-c]/
  • [^a-z] 这里表示否定,[^a-z] 指匹配第一个不是字母的字符
  • . 匹配除空白符外的单个字符 例如 abcdefg hij/./ 可以匹配到a,/.b/可以匹配到ab,/.h/只能匹配到h
  • \d 匹配数字 相当于/[0-9]/
  • \D 匹配非数字字符 相当于/[^0-9]/
  • \w 匹配所有字符 相当于/[a-zA-Z0-9]/
  • \W 匹配任何不是来自基本拉丁字母的单词字符 相当于/[^a-zA-Z0-9]/
  • \s 匹配当个空白字符
  • \S 匹配除空格以外的单个字符
  • \t 制表符
  • \n 换行符

量词

  • X?匹配0次及以上
  • x+ 匹配1次及以上
  • x? 匹配0次或1次
  • x{n} 匹配前n次,不足n次则不匹配
  • x{n,m} 匹配n到m次
  • x{n,} 相当于 x{n,∞}

常用方法

  • reg.exec 搜索匹配,返回一个匹配数组或null
  • reg.test 测试字符串是否满足模式,返回true/false
  • str.match 返回匹配到的字符串
  • str.matchAll 一个包含所有匹配正则表达式的结果及分组捕获组的迭代器
  • str.replace str.replace(reg,'') 第二个参数表示替换的内容,返回一个替换后的新字符串
  • str.search 放回首次匹配项的索引或-1
  • str.split 可以用正则表达式对数组进行切割

举例

提取字符串中的数字

let inputValue = 'hud23d-cd34'

let temp = inputValue.replace(/\D/g,'') // 这里加入g进行全局匹配,否则只会替换第一个字母

console.log(temp)

去掉字符串前后的空格,实现trim()

let inputValue = '   hud23d-cd34   '

let temp = inputValue.replace(/^\s+|\s+$/g,'')

console.log(temp)

/^\s+|\s+$/ 表示匹配以 0次及以上的空格开头或者以0次以上的空格结尾的部分