Skip to content

正则

🕒 Published at:

正则常用方法

  1. Test () : 在字符串中查找符合正则的内容,若查找到返回 true, 反之返回 false.
  • ​ 用法:正则.Test (字符串)
  1. Search () :在字符串搜索符合正则的内容,搜索到就返回出现的位置(从 0 开始,如果匹配的不只是一个字母,那只会返回第一个字母的位置),如果搜索失败就返回 -1
  • 用法:字符串.Search (正则对象)
  1. Match () 在字符串中搜索复合规则的内容,搜索成功就返回内容,格式为数组,失败就返回 null。用法: 字符串.Match (正则对象)

  2. Replace () : 查找符合正则的字符串,就替换成对应的字符串。返回替换后的内容。

  • 用法: 字符串.Replace (正则对象, 新的字符串/回调函数)(在回调函数中,第一个参数指的是每次匹配成功的字符)
  1. Split () 将字符串分隔为数组
  • 用法: 字符串.Split (正则对象, 保留的数组长度) 将字符串从满足正则的地方分隔开, 分隔后的新数组不包含满足正则条件的字符
text
str='aba';
regexp=/b/g;
str.split(regexp);    //[a,a]
  1. New RegExp (正则对象, 匹配模式) 等同于 /正则/匹配模式

三种括号的区别

() 是为了提取匹配字符串的,表达式中有几个 () 就有几个相应的匹配字符串。(\s*) 表示连续空格的字符串

[] 是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*] 表示空格或者 *

{} 一般是用来匹配的长度。比如 \s{3} 表示匹配三个空格,\s{1,3} 表示匹配1到3个空格

中文unicode编码范围

[\u4e00-\u9FFF]|[\u3400-\u4DB5]|[\u2E80-\u2FD5]|[\u{20000}-\u{2FA1D}]

[\u4E00-\u9FFF]

[\u3400-\u4DB5]

[\u{20000}-\u{2FA1D}] 四字节汉字

[\u2E80-\u2FD5] 康熙部首和扩展部首

特殊字符

特别字符描述
$匹配输入字符串的结尾位置。
如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 \n\r
要匹配 $ 字符本身,请使用 \$
()标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \()
*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+
.匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \.
[标记一个中括号表达式的开始。要匹配 [ ,请使用 \[
?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
要匹配 ? 字符,请使用 \?
\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如,
\n 匹配字符 n\n 匹配换行符。序列 \( 匹配 (,而 ( 则作为组选择器。
^匹配输入字符串的开始位置,除非在方括号表达式中使用,
当该符号在方括号表达式中使用时,
表示不接受该方括号表达式中的字符集合

要匹配 ^ 字符本身,请使用 \^
{标记限定符表达式的开始。要匹配 {,请使用 \{
|指明两项之间的一个选择。要匹配 |,请使用 |

限定符

字符描述
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 z 以及 zoo* 等价于{0,}
+匹配前面的子表达式一次或多次。例如,zo+ 能匹配 zo 以及 zoo
但不能匹配 z。+ 等价于 {1,}
?匹配前面的子表达式零次或一次。
例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。
? 等价于 {0,1}。
{n}n 是一个非负整数。匹配确定的 n 次。
例如,o{2} 不能匹配 Bob 中的 o,但是能匹配 food 中的两个 o
{n,}n 是一个非负整数。至少匹配n 次。
例如,o{2,} 不能匹配 Bob 中的 o
但能匹配 foooood 中的所有 o。o{1,} 等价于 o+o{0,} 则等价于 o*
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
例如,o{1,3} 将匹配 fooooood 中的前三个 o
o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。

定位符

字符描述
^匹配输入字符串开始的位置。
如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n\r 之后的位置匹配。
$匹配输入字符串结尾的位置。
如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n\r 之前的位置匹配。
\b匹配一个单词边界,即字与空格间的位置。
\B非单词边界匹配。

修饰符

修饰符含义描述
iignore - 不区分大小写将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
gglobal - 全局匹配查找所有的匹配项。
mmulti line - 多行匹配使边界字符 ^$ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s特殊字符圆点 . 中包含换行符 \n默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n
u允许匹配大于uFFFF的字符,比如四字节的汉字

元字符

字符描述
.匹配除了换行 \n 和行结束符之外的任何单字符。要匹配 . ,请使用 \.
\w匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
\W匹配非字母、数字、下划线。等价于 [ ^A-Za-z0-9_]
\d匹配一个数字字符。等价于 [0-9]
\D匹配一个非数字字符。等价于 ^[0-9]
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
\S匹配任何非空白字符。等价于 [^\f\n\r\t\v]
\b匹配一个单词边界,即字与空格间的位置。
\B非单词边界匹配。
\0查找 NUL 字符。
\n匹配一个换行符。等价于 \x0a\cJ
\f匹配一个换页符。等价于 \x0c\cL
\r匹配一个回车符。等价于 \x0d\cM
\t匹配一个制表符。等价于 \x09\cI
\v匹配一个垂直制表符。等价于 \x0b\cK
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。
\cx匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。

运算符优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符描述
\转义符
(), (?:), (?=), ]圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}限定符
^, $, \任何元字符、任何字符定位点和序列(即:位置和顺序)
|替换,"或"操作 字符具有高于替换运算符的优先级,使得"m

组匹配规则

() 代表组

(pattern)普通的正则匹配, 从前往后匹配, 例如:
"window abcd 98".match(/(98)/g) 值为 ["98"]
(?:pattern)非获取匹配,不进行存储供以后使用。
(?=pattern)
(?=>pattern)
正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。
这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,Windows(?=95|98)
(?!pattern)
(?>!pattern)
正向否定预查(negative assert),在任何不匹配pattern的字符串开始处匹配查找字符串。
这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如Windows(?!95|98)
(?<=pattern)反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。
如果前面的内容符合 pattern,则匹配成功;如果不符合,则匹配失败。
也就是匹配条件 (这里是 98) 前面的内容, 例如:
"window abcd 98".match(/(?<=window)98/g) 值为 ["98"]
"window abcd 98".match(/(?<=windows)98/g) 匹配不到
(?<!pattern)反向否定预查,与正向否定预查类似,只是方向相反。
如果前面的内容不符合 pattern,则匹配成功;如果符合,则匹配失败。
也就是匹配条件(这里是 98) 前面的内容,例如:
"window abcd 98".match(/(?<!window)98/g) 匹配不到
"window abcd 98".match(/(?<!windows)98/g) 值为 ["98"]