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*/ //@前面现在改成用这个比较好吧?


posted @ 2021-08-15 21:21  wl夏白  阅读(119)  评论(0)    收藏  举报