JavaScript正则表达式小记

正则表达式是用于匹配字符串中字符组合的模式。

好用的正则表达式可视化工具: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前一个字符所在列的后面一列。

jungle