正则常用方法
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 |
组匹配规则
()
代表组
(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"] |