JS正则表达式详解02
符号
修饰符
i:执行对大小写不敏感的匹配
g:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m:执行多行匹配。
定位符
^符号
查找字符串一个开始是不是符合,一个字符串最多返回一次(除非使用修饰符m)
"abc \nabc\naa\ra".match(/^a/g);//return ["a"]
"1abc \nabc\naa\ra".match(/^a/g);//return null
"1abc \nabc\naa\ra".match(/^a/gm);//return ["a", "a", "a"]
$符号
查找字符串结尾是不是符合,一个字符串最多返回一次(除非使用修饰符m)
"abc \nabc\naa\ra".match(/a$/g);//return ["a"]
"1abc \nabc\naa\ra1".match(/a$/g);//return null
"a1aba\nabca\r111a".match(/a$/mg);//return ["a", "a", "a"]
限定符
+符号
限定必须出现一次或连续多次,等效于{1,}
"acabcabbcacb".match(/ab+/g);//return ["ab", "abb"]
*符号
限定出现0次或者连续多次,等效于{0,}
"acabcabbcacb".match(/ab*/g);//return ["a", "ab", "abb", "a"]
?符号
限定出现0次或1次,等效于{0,1}
"acabcabbcacb".match(/ab?/g);//return ["a", "ab", "ab", "a"]
"acabcabbcacb".match(/abc?/g);//return ["abc", "ab"]
{n},{n,},
{n}限定出现n次,n为非负数
{n,}限定出现n次及以上,n为非负数
{n,m}限定出现n次到m次之间,包括n和m,n和m为非负数,且n<=m
"acabcabbcacb".match(/ab{1}/g);//return ["ab", "ab"]
"acabcabbcacb".match(/ab{1,}/g);//return ["ab", "abb"]
"acabcabbcacb".match(/ab{0,2}/g);//return ["a", "ab", "abb", "a"]
贪婪匹配与非贪婪匹配
正则表达式进行匹配的时候默认都是贪婪匹配,例如
"acabcabbcacb".match(/ab+/g);//return ["ab", "abb"]
他的返回值时["ab","abb"]而不是["ab","ab"]
通过在”+“后面增加”?“符号,可以将贪婪匹配改为非贪婪匹配
"acabcabbcacb".match(/ab+?/g);//return ["ab", "ab"]
"?"可以紧跟任何其他限定符(”+“,”*“,"?","{n}","{n,}","{n,m}")中后,使其变成非贪婪匹配
PS:我为什么要加上”?“,直接将”+“改成”{1}“不好吗???
选择匹配符
|符号
选择匹配符号,用于选择匹配两个或多个选项中任意一个
"acabcabbcacb".match(/ab|c/g);//return ["c", "ab", "c", "ab", "c", "c"]
//匹配的是|两边所有的,这样匹配的是ab和c,如果想匹配ab和ac,应改加小括号
"acabcabbcacb".match(/a(b|c)/g);//reutn ["ac", "ab", "ab", "ac"]
//(b|c)等同于[bc]
"acabcabbcacb".match(/a[bc]/g);//reutn ["ac", "ab", "ab", "ac"]
//多个进行匹配
"acabcabbcacb".match(/ab|ac|bc/g);["ac", "ab", "ab", "bc", "ac"]
[]符号
[abc]
匹配方括号之间的任何字符
//[abc]相当于(a|b|c),有些许不同,比如`a[b.]`和`a(b|.)`
"acabcabbcacb".match(/a[bc]/g);//reutn ["ac", "ab", "ab", "ac"]
[^abc]
匹配任何不在方括号之间的字符。
"acabcabbcacbad a a".match(/a[^bc]/g);//return ["ad", "a "]
[a-z]
匹配a和z及之间所有的小写字符,可以是[a-d],但是不能是[d-a]
"acabcabbcacbad a a".match(/a[a-c]/g);//return ["ac", "ab", "ab", "ac"]
其他的包括[A-Z],[0-9],[A-z],[a-z],[0-9],[A-Z],[A-z]等
(?=n),(?!n),(?:n)
(?=n)匹配
匹配任何其后紧接指定字符串 n的字符串。
"acabcabbcacbad a a".match(/a(?=bb)/g);//return ["a"]
// 获取的是符合abb条件的那个a
(?!n)匹配
匹配任何其后没有紧接指定字符串 n 的字符串。与(?=n)相反
"abacad".match(/a(?!b)/g);//return ["a", "a"]
//获取的是不符合ab条件的另外两个a
(?:n)匹配
匹配任何其后紧接指定字符串 n的字符串及n字符串。与(?=n)类似,但是要加上字符串n。
"acabcabbcacbad a a".match(/a(?:bb)/g);//return ["abb"]
// 等价与/abb/
元字符
.字符
. 元字符用于查找单个字符,除了换行和回车符。
需要转义的特殊字符包括以下10种,除了"\n","\r"外,都可以匹配
| 代码 | 输出 |
|---|---|
| \' | 单引号 |
| \" | 双引号 |
| \$ | 和号 |
| \\ | 反斜杠 |
| \n | 换行符 |
| \r | 回车符 |
| \t | 制表符 |
| \b | 退格符 |
| \f | 换页符 |
| \v | 垂直制表符\u000b |
"a\'a\"a\&a\\a\na\ra\ta\ba\fa\va\D".match(/a./mg);
//return ["a'", "a\"", "a&", "a\\", "a\t", "a\b", "a\f", "a\u000b", "aD"]
//PS: 当`.`在`[]`一起时,只是一个普通的点,但是和`|`一起时不行
"a.bab".match(/a[.]/g);//return ["a."]
"a.bab".match(/a./g);//return ["a.", "ab"]
"a.bab".match(/a(a|.)/g);//return ["a.", "ab"]
\w,\W(英文数字下划线)
\w:匹配英文字母,数字,或下划线,相当于[A-z0-9_]
\W:匹配非英文字母,数字,或下划线,相当于[^A-z0-9_]
\d\D(数字)
\d:匹配数字,相当于[0-9]
\D:匹配非数字,详单与[^0-9]
\s,\S(空白符)
\s:匹配任意空白符,包括空格,换页符,换行符,回车符,制表符,垂直制表符6种,相当于[\f\n\r\t\v ]。
"aba\na\ra\ta\ba\fa\va\Da ".match(/a\s/mg);
"aba\na\ra\ta\ba\fa\va\Da ".match(/a[\f\n\r\t\v ]/mg);
//return ["a\n", "a\r", "a\t", "a\f", "a\u000b", "a "]
\S:匹配非空白字符,相当于[^\f\n\r\t\v ]。
\b,\B(单词边界)
\b:匹配单词边界
例如”\ba“,表示”a“前面没有数字,字母,下划线的”a“?
"abc abcabc _abc$abca_a".match(/\ba/g);//return ["a", "a", "a"]
"abc 1abcabc _abc$abca_a".match(/\ba/g);//return ["a", "a"]
"abc abcabc _abc$abca_a".match(/a\b/g);//return ["a"]
//与”[\Wa]“类似,但是要加上"^a",并且去掉a前面匹配的\W的字符?
"abc abcabc _abc$abca_a".match(/(\W|^)a/g);//return ["a", " a", "$a"]
//其结果去掉a前面的\W,与\ba应该等价
\B:匹配非单词边界
"abc abcabc _abc$abca_a".match(/\Ba/g);//return ["a", "a", "a", "a"]
//与”[\wa]“类似,但是要去掉a前面匹配的\w的字符?
"abc abcabc _abc$abca_a".match(/\wa/g);//return ["ca", "_a", "ca", "_a"]
//其结果去掉a前面的\w,与\Ba应该等价
其他
/\127/g;//用于查找以八进制数 xxx 规定的字符。
/\x57/g;//查找以十六进制数 dd 规定的字符。
/\u0057/g;//元字符用于查找以十六进制数 xxxx 规定的 Unicode 字符。
/[\u4e00-\u9fa5]/g;//查找汉字
常用校验解析
//Email地址
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
// ^\w+
//\w:表示字母数字或下划线,^\w:表示以字母数字或下划线开头;^\w+:表示以字母数字或下划线开头,重复1次或多次
//([-+.]\w+)
// [-+.]:表示下一个字符是`-`,`+`或者`.`,
/^[A-z_]\w*/ //@前面现在改成用这个比较好吧?

浙公网安备 33010602011771号