正则表达式是用于匹配字符串中字符组合的模式。
好用的正则表达式可视化工具:https://regexper.com
JavaScript中正则表达式被应用于 RegExp RegExp.exec RegExp.test String String.match String.replace String.search String.splite
正则表达式常用特殊字符
字符 | 含义 |
---|---|
. |
匹配除换行符 \n 之外的任何单字符。 |
? |
匹配前面一个表达式0次或者1次。等价于 {0,1}。 如果紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪的(匹配尽量少的字符),和默认的贪婪模式(匹配尽可能多的字符)正好相反。例如,对 “123abc” 应用 /\d+/ 将会返回 “123”,如果使用 /\d+?/,那么就只会匹配到 “1”。还可以运用于先行断言 |
(x) |
匹配 ‘x’ 并且记住匹配项。括号被称为 捕获括号。 |
(?:x) |
匹配 ‘x’ 但是不记住匹配项。这种叫作非捕获括号,使得你能够对括号内的整个子表达式使用正则表达式运算符 |
x(?=y) |
匹配’x’仅仅当’x’后面跟着’y’.这种叫做正向肯定查找。 |
x(?!y) |
匹配’x’仅仅当’x’后面不跟着’y’,这个叫做正向否定查找。 |
[\b] |
匹配一个退格(U+0008) |
\b |
匹配一个词的边界,一个词的边界的含义是该词前或后没有其他”字”字符 JavaScript的正则表达式引擎将特定的字符集定义为“字”字符。不在该集合中的任何字符都被认为是一个断词。这组字符相当有限:它只包括大写和小写的罗马字母,十进制数字和下划线字符。 |
\B |
匹配一个非单词边界。他匹配一个前后字符都是相同类型的位置:都是“字”字符或者都不是“字”字符。一个字符串的开始和结尾都被认为不是“字”字符,或者空字符串。 |
\d |
匹配一个数字,等价于[0-9] |
\D |
匹配一个非数字字符,等价于[^0-9] |
\n \r \t \v |
分别表示匹配一个换行符(U+000A)、回车符(U+000D)、水平制表符(U+0009)、垂直制表符(U+000B) |
\w |
匹配一个单字字符(字母、数字或者下划线),等价于[A-Za-z0-9_] |
\W |
匹配一个非单字字符 |
\s |
匹配一个空白字符,包括空格、制表符、换页符和换行符 等价于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] |
\S |
匹配一个非空白字符 |
\n |
此处用’n’代表一个数,表示返回最后的第n个子捕获匹配的子字符串(捕获的数目以左括号技术) 比如 /apple(,)\sorange\1/ 匹配”apple, orange, cherry, peach.”中的’apple, orange,’ |
\0 |
匹配 NULL (U+0000) 字符, 不要在这后面跟其它小数,因为 \0 |
\xhh \xhhhh |
与代码 hh 匹配字符(两个、四个十六进制数字) |
\u{hhhh} |
(仅当设置了u标志时) 使用Unicode值hhhh匹配字符 (十六进制数字). |
正则表达式标志
var re = /pattern/flags;
或 var re = new RegExp("pattern", "flags");
g | 全局搜索 |
---|---|
i | 不区分大小写搜索 |
m | 多行搜索 |
y | 执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志 |
回车(\r): 光标回到本行行首 换行(\n):光标移到下一行 水平制表符(\t):一般系统中显示水平制表符将占8列 垂直制表符(\v):表现类似换行,即让\v后面的字符从下一行开始输出,且开始的列数为\v前一个字符所在列的后面一列。