这里是JS的正则的一点心得,并不是最完整的规则汇总,更侧重实际运用中的快速判断,初学者接触正则之后往往会被一堆星号括号给弄晕,有了一些速判技巧就能从整体上把握从而不慌乱。

  JS正则快速判断技巧的核心就是:注意圆括号和问号。这已经能够应付大部分实际应用了。

 

一、圆括号

  众所周知,正则中中括号表示范围,大括号表示重复次数,圆括号表示分组。

  圆括号表示分组,但是分组内还有很多文章,细分一下:



       (1):圆括号本身表示分组,同时会保存匹配的项,这叫捕获性分组,默认都是这样的,比如:



         var c="a001”;  /a(\d*)/.test(c);  console.log(RegExp.$1);    //001



         var num=“1234 5678”;  var newNum=num.replace(/(\d{4}) (\d{4})/,”$2 $1");



       (2):如果不想保存,就采用非捕获性分组(?:),比如:



         var c="a001”;  /a(?:\d*)/.test(c);  console.log(RegExp.$1);     //空



       (3):圆括号的分组里,可以对字符组合使用限定符,并且其后可以跟次数,比如:(A\d){2}匹配A3A5



       (4):从分组里多个直接量中选择一个。比如:g(A|a)y,不过这种情况用 g[Aa]y 更快



       (5):当模式中有嵌套圆括号时,变量的编号会按照圆括号开始出现的位置一次进行,比如:



            /([A-Za-z](\d{2}))((-)\d{2})/匹配”A22-33”时,匹配情况如下:



            $1: A22, $2: 22, $3: -33, $4: -



       (6): (?:)表示非捕获性分组,(?=)则表示正向前瞻分组,a(?=reg)匹配后边跟着reg的a;



       (7): (?!)则表示负向前瞻分组,a(?!reg)匹配后边不跟着reg的a;



JavaScript不支持后瞻;



 



”。



 



二、问号



  问号的用法需要记住三种,除了上面已经提到了在圆括号内部的用法。另外记住下边两种用法即可:



  1、如果问号是直接跟在其他字符后面,则作为一个简单量词,表示出现零次或一次,简单量词还包括:*,+,{n},{n,m},{n,}。



JavaScript不支持支配量词。)。



所有简单量词本身都是贪婪量词。比如:












数组的第一项表示字符串中与整个模式匹配的字符串,之后的每一项(如果有)保存着与正则表达式中的捕获组匹配的字符串。



 



  看,其实东西也不多,只要记住了圆括号和问号的用法,就可以快速将正则式加以分割然后逐个理解,从而不会被一堆问号星号括号给弄晕了。当然最基础的一些知识还是要具备的,不过是纯记忆性质的,比较简单了,附上一些常用知识:



字符

正则

描述

\t

/\t/

制表符

\n

/\n/

制表符

\r

/\r/

回车符

\f

/\f/

换页符

\a

/\a/

alert字符

\e

/\e/

escape字符

\cX

/\cX/

与X相对应的控制字符

\b

/\b/

与回退字符

\v

/\v/

垂直制表符

\0

/\0/

空字符



 



字符

等同于

描述

.

[^\n\r]

除了换行和回车之外的任意字符

\d

[0-9]

数字字符

\D

[^0-9]

非数字字符

\s

[ \t\n\x0B\f\r]

空白字符

\S

[^ \t\n\x0B\f\r]

非空白字符

\w

[a-zA-Z_0-9]

单词字符(所有的字母)

\W

[^a-zA-Z_0-9]

非单词字符