符号 | 作用 | 举例 |
---|---|---|
元字符 | ||
. | 匹配除了换行符(\n)以外的任意字符 | abc |
\w | 匹配数字字母下划线或汉字 | abc123_!@#$%^&*()汉字+ |
\s | 匹配任意空白符(" ") | 123 456 |
\d | 匹配数字 | 123abc |
\b | 匹配单词的开始或结束位置 | \bhi hello high ing\b sing bingo ings |
^ | 匹配字符串开始或行首 | |
$ | 匹配字符串的结束 | |
\ | 转义字符,用于把元字符转义,例如\. \* \\ | |
重复 | ||
* | 重复0到或多次 | \w* |
+ | 重复1到多次 | \b+ |
? | 重复0或1次 | \s? |
{n} | 重复n次,不多不少 | \d{11} |
{n,} | 重复n到多次 | \d{16,} |
{n,m} | 重复n到m次 | [abc]{2,5} |
字符类 | ||
[] | 匹配括号中的任何一位 | [aeiou] abcdefghi [0-9a-zA-Z?()\[\]] abcdefjg!@#$%^&()_+ |
分枝条件 | ||
| | 分枝条件, 注意严苛的条件在前,宽泛的条件在后 | 0\d{2}-\d{8}\b|0\d{3}-\d{7}\b 029-88337766 0917-3431110 |
反义 | ||
\W | 匹配非字母数字下划线汉字的字符,例如符号括号空格 | ac*()[]_+| |
\S | 匹配不是空白符的字符 | |
\D | 匹配非数字的字符 | |
\B | 匹配不是以字符开头或结束的位置 | \Bhi hello high chi |
[^] | 匹配除了括号内字符以外的字符 | [^abc] abcdef |
分组 | ||
() | 括号扩起来的部分为一个子表达式,或叫做分组,括号内的部分作为一个整体 | (\d{1,3}\.){3}\d{1,3} 123.22.45.1 |
(?<name>) | 把分组命名为name,可以在结果集里通过名字来访问匹配结果 | (?<qq>\d{5}) 我的qq号是12345,厉害吧 |
后向引用 | ||
\1 或 \<name> | 通过索引或名字引用前面匹配到的内容 | \b(\w+)\b\s+\1\b \b(?<word>\w+)\b\s+\<word>\b go go go |
零宽断言 | ||
(?=) | 匹配表达式前面的内容,但不包括表达式匹配的内容 | \w+(?=\s\d{5}) aa 12345 bb |
(?<=) | 匹配表达式后面的内容,但不包含表达式匹配的内容 JS不支持 | (?<=\d{5}\s)\w+ |
(?!xxx) | 零宽负向先行断言,匹配某位置后不包含xxx的字符串,可以连用(?!xxx)(?!bbb)表示既不包含xxx 也不包含 bbb, 比如 aa\\(?!xxx)(?!bbb)[^\\]*\\cc | aa\asdf\cc |
(? | 零宽负向回顾后发断言,匹配某位置前不包含xxx的字符串 | (? |
贪婪与懒惰匹配 | ||
默认为贪婪匹配,尽可能多匹配 | [a-z]* abcde | |
在重复次数后加一个?表示懒惰匹配,尽量少匹配 | [a-z]*? abcde | |
*? | 匹配任意次,尽可能少匹配 | [a-z]*? abcde |
+? | 匹配1或多次,尽可能少匹配 | [a-z]+? abcde |
?? | ||
{n,m}? | ||
{n,}? |
主要用到的方法:
var re = new Regex("Hello World");
var reg = /\w{5}/ig
reg.test(s)
reg.exec(s)