Skip to content

Instantly share code, notes, and snippets.

@xiuhy
Created December 18, 2017 03:07
Show Gist options
  • Save xiuhy/1ac43b74c9561566c28cea83fab19108 to your computer and use it in GitHub Desktop.
Save xiuhy/1ac43b74c9561566c28cea83fab19108 to your computer and use it in GitHub Desktop.
正则表达式

正则表达式

基础语法

  • \ 标记下一个字符是特殊字符或文字。例如,"n" 和字符 "n" 匹配。"\n" 则和换行字符匹配。序列 "\" 和 "" 匹配,而 "(" 则和 "(" 匹配。
  • ^ 匹配输入的开头。
  • $ 匹配输入的末尾。
    • 匹配前一个字符零或多次。例如,"zo*" 与 "z" 或 "zoo" 匹配。
    • 匹配前一个字符一次或多次。例如,"zo+" 与 "zoo" 匹配,但和 "z" 不匹配。
  • ? 匹配前一个字符零或一次。例如,"a?ve?" 和 "never" 中的 "ve" 匹配。
  • . 匹配除换行字符外的任何单个字符。
  • (pattern) 匹配 pattern 并记住该匹配。匹配上的子字符串,要匹配圆括号字符 ( ),则需使用 "(" 或 ")"。
  • x|y 匹配 x 或 Y
  • {n} n 是非负整数。共匹配 n
  • {n,} n 是一个非负整数。至少匹配 n 次。例如,"o{2,}" 和 "Bob" 中的 "o" 不匹配,但和 "foooood" 中的所有 o 匹配。"o{1,}" 与 "o+" 等效。"o{0,}" 和 "o*" 等效。
  • {n,m} m 和 n 是非负整数。至少匹配 n 次而至多匹配 m 次。例如,"o{1,3}" 和 "fooooood" 中的前三个 o 匹配。"o{0,1}" 和 "o?" 等效。
  • [ 字符集合。匹配括号内的任一字符。例如,"[abc]" 和 "plain" 中的 "a" 匹配。 [^xyz 否定字符集合。匹配非括号内的任何字符。例如,"[^abc]" 和 "plain" 中的 "p" 匹配。
  • [a-z] 字符范围。和指定范围内的任一字符匹配。例如,"[a-z]" 匹配 "a" 到 "z"范围内的任一小写的字母表字符。
  • [^m-z] 否定字符范围。匹配不在指定范围内的任何字符。例如,"[m-z]" 匹配不在 "m" 到 "z"范围内的任何字符。
  • \b 匹配字的边界,也就是说。该占位符前一个字符和后一个字符不全是\w(字母数字中文_)
  • \B 匹配非字边界。"ea*r\B" 和 "never early" 中的 "ear" 匹配。
  • \d 匹配数字字符。等价于 [0-9]。
  • \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_]" 等效。
  • \num 匹配 num,其中 num 是一个正整数。返回记住的匹配的引用。例如,"(.)\1" 匹配两个连续的同一字符。
  • \n 匹配 n,其中 n 是八进制换码值。八进制换码值必须是 1、2、或 3 位长。例如,"\11" 和 "\011" 都匹配制表字符。"\0011" 和 "\001" & "1" 是等效的。八进制换码值必须不超过 256。如果超过了,则只有前两位组成表达式。允许在正则表达式中使用 ASCII 码。
  • \xn 匹配 n,其中 n 是十六进制换码值。十六进制换码值必须正好是两位长。例如,"\x41" 与 "A" 匹配。"\x041" 和 "\x04" & "1" 是等效的。允许在正则表达式中使用 ASCII 码。

** 基础语法不完全,自己百度**

高级应用

分组

通过小括号分组表达式,在后面验证中可用\数字 表示对前面分组引用;\1:表示对第一个小括号的引用,\2:表示第二个....... 数字大于分组则表示转义字符。0标识整个正则表达式

断言

类似匹配某个表达式的位置,在匹配过程中不占用字符,所以成为“零宽”。 断言是条件,不做匹配。 满足条件是正断言,不满足条件是负断言 断言前后相对目标字符串而言,目标在前面的叫正先断言,目标再后面是正后断言。(从左往右)。或者说正先断言就是正则表达式前面的内容,正后:正则表达式后面的内容

1 (?=pattern) 正先断言 目标字符串在前面,匹配pattern前面的字符串。

2 (?!pattern) 负先断言

3 (?<=pattern) 正后断言 目标字符串在后面,匹配pattern后面的字符串。

4 (?<!pattern) 负后断言 目标字符串在后面,匹配目标字符串前面不是pattern的字符串

贪婪模式,惰性模式

贪婪:如果符合要求就一直匹配下去直到无法匹配为止 惰性:一旦符合匹配就结束

贪婪模式标识符:+,,?,{n} 惰性: +?,?,??,{n}?

回溯:正则时尝试各种方式匹配过程,如果发生错误则回到上一个点继续匹配下一个正则回溯太多会影响效率

e.g:

	 /".*"/ "acd"ef 

避免回溯方法:/"[^"]*"/

js 的正则方法

RegExp对象方法

  1. compile 编译正则表达式
  2. exec 检索匹配的内容:返回匹配内容
  3. test 检索正则是否匹配:返回值boolean

String对象相关正则的方法

  1. search 检索与正则表达式相互匹配的下标
  2. match 检索与正则匹配的文本内容
  3. replace 替换与正则相关的或者字符串匹配的内容
  4. split 把字符串分割为字符串数组
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment