└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # 声明方式 2 | 3 | 1、构造函数方式 4 | ```js 5 | var reg = new RegExp('\d', 'gi'); 6 | ``` 7 | 2、字面量方式 8 | ```js 9 | var reg = /\d/gi; 10 | ``` 11 | 12 | # 修饰符 13 | 14 | 修饰符有三种:`i, g, m` 可以同时出现,没有顺序(即 `gi` 与 `ig` 一样),请参考下方说明 15 | 16 | |修饰符|说明| 17 | |-|-| 18 | |i|忽略大小写匹配| 19 | |g|全局匹配,即是匹配一个后继续匹配,直到结束| 20 | |m|多行匹配,即是遇到换行后不停止匹配,直到结束| 21 | 22 | # 特殊字符 23 | 24 | |符号|作用| 25 | |-|-| 26 | |\ |做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 或对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"| 27 | |^ |匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"| 28 | |$ |匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"| 29 | |. |匹配任意单个字符,除换行和结束符| 30 | |* |匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa| 31 | |+ |匹配前面元字符1次或多次,/ba+/将匹配ba,baa,baaa| 32 | |? |匹配前面元字符0次或1次,/ba?/将匹配b,ba | 33 | |(x) |匹配x保存x在名为$1...$9的变量中 | 34 | |x|y |匹配x或y | 35 | |{n} |精确匹配n次 | 36 | |{n,} |匹配n次以上 | 37 | |{n,m} |匹配n-m次 | 38 | |[xyz] |字符集(character set),匹配这个集合中的任一一个字符(或元字符) | 39 | |[^xyz] |不匹配这个集合中的任何一个字符 | 40 | |[a-z] | 任意字母 []中的表示任意一个都可以| 41 | |[^a-z] | 非字母 []中^代表除了| 42 | |[\b] |匹配一个退格符 | 43 | |\b |匹配一个单词的边界 | 44 | |\B |匹配一个单词的非边界 | 45 | |\cX |这儿,X是一个控制符,/\cM/匹配Ctrl-M | 46 | |\d |匹配一个字数字符,/\d/ = /[0-9]/ | 47 | |\D |匹配一个非字数字符,/\D/ = /[^0-9]/ | 48 | |\n |匹配一个换行符 | 49 | |\r |匹配一个回车符 | 50 | |\f |匹配换页符 | 51 | |\s |匹配一个空白字符,包括\n,\r,\f,\t,\v等 | 52 | |\S |匹配一个非空白字符,等于/[^\n\f\r\t\v]/ | 53 | |\t |匹配一个制表符 | 54 | |\v |匹配一个重直制表符 | 55 | |\w |匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9] | 56 | |\W |匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]| 57 | |\0 |匹配NUL字符 | 58 | 59 | ## 零宽断言 60 | 61 | 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像`\b,^,$`那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言 62 | 63 | |||| 64 | |-|-|-| 65 | |先行断言|也叫零宽度正预测先行断言`(?=表达式)`表示匹配表达式前面的位置|例如`[a-z]*(?=ing)`可以匹配cooking singing中的cook与sing| 66 | 67 | 注意:先行断言的执行步骤是这样的先从要匹配的字符串中的最右端找到第一个ing(也就是先行断言中的表达式)然后 再匹配其前面的表达式,若无法匹配则继续查找第二个ing再匹配第二个ing前面的字符串,若能匹配 则匹配 68 | 69 | |||| 70 | |-|-|-| 71 | |后发断言|也叫零宽度正回顾后发断言`(?<=表达式)`表示匹配表达式后面的位置|例如`(?<=abc).*`可以匹配abcdefg中的defg| 72 | 73 | 注意:后发断言跟先行断言恰恰相反 它的执行步骤是这样的:先从要匹配的字符串中的最左端找到第一个abc(也就是先行断言中的表达式)然后 再匹配其后面的表达式,若无法匹配则继续查找第二个abc再匹配第二个abc后面的字符串,若能匹配则匹配,例如`(?<=abc).*`可以匹配abcdefgabc中的defgabc 而不是abcdefg 74 | 75 | ||| 76 | |-|-| 77 | |负向零宽断言|`(?!表达式)`也是匹配一个零宽度的位置,不过这个位置的“断言”取表达式的反值,例如 `(?!表达式)`表示表达式前面的位置,如果表达式 不成立,匹配这个位置;如果 表达式 成立,则不匹配:同样,负向零宽断言也有“先行”和“后发”两种,负向零宽后发断言为`(?