正则常用方法
Test (): 在字符串中查找符合正则的内容,若查找到返回 true, 反之返回 false.
- 用法:
正则.Test (字符串)
Search ():在字符串搜索符合正则的内容,搜索到就返回出现的位置(从 0 开始,如果匹配的不只是一个字母,那只会返回第一个字母的位置),如果搜索失败就返回 -1
- 用法:
字符串.Search (正则对象)
Match ()在字符串中搜索复合规则的内容,搜索成功就返回内容,格式为数组,失败就返回 null。用法:字符串.Match (正则对象)Replace (): 查找符合正则的字符串,就替换成对应的字符串。返回替换后的内容。
- 用法:
字符串.Replace (正则对象, 新的字符串/回调函数)(在回调函数中,第一个参数指的是每次匹配成功的字符)
Split ()将字符串分隔为数组
- 用法:
字符串.Split (正则对象, 保留的数组长度)将字符串从满足正则的地方分隔开, 分隔后的新数组不包含满足正则条件的字符
text
str='aba';
regexp=/b/g;
str.split(regexp); //[a,a]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 | 非单词边界匹配。 |
修饰符
| 修饰符 | 含义 | 描述 |
|---|---|---|
i | ignore - 不区分大小写 | 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。 |
g | global - 全局匹配 | 查找所有的匹配项。 |
m | multi 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|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式 |
组匹配规则
() 代表组
(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"] |
