JavaScript正则表达式浅显知识点整理

163 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

正则表达式浅显知识点整理

概念

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

搜索模式可用于文本搜索文本替换

什么是正则表达式?

正则表达式是由一个字符序列形成的搜索模式。

当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。

正则表达式可以是一个简单的字符,或一个更复杂的模式。

正则表达式可用于所有文本搜索和文本替换的操作。

语法/正则表达式主体/修饰符(可选)new RegExp('正则表达式')

修饰符

  • i:大小写不敏感
  • g:全局匹配
  • m:多行匹配

正则表达式模式

方括号用于查找某个范围内的字符:

  • [abc] :匹配方括号中的任意一个字符
  • [^abc] :匹配方括号中未包含的任意字符
  • [0-9] :查找任何从 0 至 9 的数字
  • [a-z] :查找任何从小写 a小写 z 的字符
  • [A-Z] :查找任何从大写 A大写 Z 的字符。
  • [A-z] :查找任何从大写 A小写 z 的字符。
  • (x|y) :匹配 x y

特殊字符:

  • ^ :匹配字符
  • $ :匹配字符末尾
  • * :匹配任意次,零次多次
  • + :匹配至少一次,一次或多次。
  • ? :匹配零次一次
  • {n} :n为正整数,匹配 n 次。
  • {n,} :n为正整数,至少匹配 n 次。
  • {n,m}n 和 m 均为正整数,但 n <= m,匹配最少 n最多 m
  • (n) :匹配n,并获取。
  • (?:n) :匹配n,但不获取。
  • (?=n) :正向肯定预查,匹配任何其后紧接指定字符串 n 的字符串。
  • (?!n) :正向否定预查,匹配任何其后没有紧接指定字符串 n 的字符串。
  • (?<=n) :反向肯定预查,与正向肯定预查类拟,只是方向相反。
  • (?<!n) :反向否定预查,正向否定预查类拟,只是方向相反。
  • . :匹配单个字符,除了换行(\n) 和 行结束符 (\r) 。
  • \b:匹配一个单词边界,就是单词和空格间的位置。
  • \B:匹配非单词边界。
  • \d:匹配一个数字字符,相当于[0-9] 。digit
  • \D:匹配非数字字符,相当于[^0-9]
  • \f:匹配一个换页符。
  • \n:匹配一个换行符。
  • \r:匹配一个回车符。
  • \s:匹配任何空白字符,包括空格、制表符、换页符等等,相当于[ \f\n\r\t\v]
  • \S:匹配任何非空白字符,相当于[^ \f\n\r\t\v]
  • \t:匹配一个制表符。
  • \v:匹配一个垂直制表符。
  • \w:匹配数字、字母及下划线,相当于[A-Za-z0-9_]
  • \W:匹配非单词字符,相当于[^A-Za-z0-9_]
  • \xxx:匹配以八进制数 xxx 规定的字符。
  • \xdd:匹配以十六进制数 dd 规定的字符。
  • \uxxxx:匹配以十六进制数 xxxx 规定的 Unicode 字符
  • \0:查找 NULL 字符。

常用正则表达式

用户名/^[a-z0-9_-]{3,16}$/ -- 包含小写字母、数字和下划线,3到16位

密码/^[a-z0-9_-]{6,18}$/ -- 包含小写字母、数字和下划线,6到18位

支持正则表达式的 String 对象的方法

  • search() :检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

  • replace() :字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

  • match() :检索字符串内指定的值,或找到一个或多个正则表达式的匹配。

     var str = "hello world";
     // search
     // 使用正则表达式
     // 全局匹配o
     console.log(str.search(/o/i)) // 4
     ​
     // 使用字符串
     console.log(str.search("o")) // 4
     ​
     // replace
     // 使用正则表达式
     console.log(str.replace(/l/gi, "h")) // hehho worhd
     // 使用字符串
     console.log(str.replace("l", "h")) // hehlo world
     ​
     // match
     console.log(str.match(/o/g)) // ['o', 'o']
    

RegExp 对象方法

使用 test()

  • 用于检测一个字符串是否匹配某个模式。

  • 如果字符串中有匹配的值返回 true ,否则返回 false。

     var patt = /e/
     console.log(patt.test("can you speek chinese")) //true
     // 可以不用设置正则表达式的变量
     console.log(/e/.test("can you speek chinese")) //true
    

使用 exec()

  • 用于检索字符串中的正则表达式的匹配。

  • 如果字符串中有匹配的值返回该匹配值,否则返回 null。

     // 用于搜索字符串中的字母 "e":
     // ['e', index: 10, input: 'can you speek chinese', groups: undefined]
     console.log(/e/.exec("can you speek chinese"))
    

使用 toString()

  • 返回正则表达式的字符串值:

     var patt = new RegExp("can you speek chinese", "g");
     console.log(patt.toString()) // /can you speek chinese/g