JavaScript正则表达式
简单模式
直接匹配指定字符组合
//输入
let str1 = 'apple';
let reg1 = /pp/;
console.log(reg1.exec(str1));
//输出
pp
复杂模式-断言
边界类断言
匹配符 | 含义 | 举例 | 例子含义 |
---|---|---|---|
^ | 匹配输入的开头 | /^A/ | 可以匹配Apple的A |
$ | 匹配输入的结束 | /t$/ | 可以匹配eat的t |
\b | 匹配单词的边界 | /\bm/ | 可以匹配mmon的m |
/n\b/ | 可以匹配moon的n | ||
\B | 匹配非单词边界(匹配单词内部) | /\Bon/ | 可以匹配at noon的on(以前面的单词o为准) |
/ye\B/ | 可以匹配possibly yesterday的ye(以后面的单词e为准) |
其他断言
匹配符 | 含义 | 举例 | 例子含义 |
---|---|---|---|
x(?=y) | 向前断言,如果x后面是y,则匹配x | /Jack(?=Joe)/ | 当Jack后面是Joe时匹配Jack |
/Jack(?=Joe|May)/ | 当Jack后面是Joe或May时匹配Jack | ||
x(?!y) | 向前否定断言,x没有被y紧随时匹配x | /\d+(?!\.)/ | 数字后面没有跟随小数点时才会得到匹配,例如对于3.14,匹配14而不匹配3 |
(?<=y)x | 向后断言,x前面是y时匹配x | /(?<=Jack)Joe/ | 可以匹配JackJoe的Joe |
/(?<=Jack|Tom)Joe/ | 当Joe前面是Jack或Tom时,可以匹配Joe | ||
(? | 向后否定断言,x前面不是y时匹配x | /\(? | 数字前面没有负号时才会得到匹配,例如可以匹配到3,但是匹配不到-3 |
复杂模式-字符类
匹配符 | 含义 |
---|---|
. | 匹配除了换行符之外的任何单个字符(如果在字符集内,则与符号“.”匹配) |
\d | 匹配数字,相当于[0-9] |
\D | 匹配非数字,相当于[^0-9] |
\w | 匹配字母数字下划线,相当于[A-Za-z0-9_] |
\W | 匹配非字母数字下划线,相当于[^A-Za-z0-9_] |
\s | 匹配所有类型的空格,,包括空格、制表符、换页符、换行符和其他Unicode字符,相当于[\f\n\r\t\v\u00a0\u1680\u2000\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] |
\S | 匹配除了空格之外的单个字符,相当于[^\f\n\r\t\v\u00a0\u1680\u2000\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] |
\t | 匹配水平制表符 |
\r | 匹配回车符 |
\n | 匹配换行符 |
\v | 匹配垂直制表符 |
\f | 匹配换页符 |
[\b] | 匹配退格键 |
\0 | 匹配NUL字符,例如可以匹配到“123\0”中的“\0” |
复杂模式-组和范围
字符集 | 含义 |
---|---|
x|y | 匹配x或y |
[xyz] [a-c] |
字符集,匹配包含在字符集中的单个字符 |
[^xyz] [^a-c] |
字符集,匹配不包含在字符集中的单个字符 |
(x) | 匹配x并记住匹配项(如果不使用捕获组,则只会匹配到第一个符合要求的就停止) |
\n | n是一个正整数。引用倒数第n个括号中的值。例如,/apple(,)\sorange\1/ 匹配 “apple,orange,cherry,peach” 中的 "apple,orange,", 其中 \1 引用了 之前使用()捕获的 , |
(? |
具名捕获组。匹配"x"并将其存储在返回的匹配项的groups属性中,该属性位于 |
(?:x) | 非捕获组。匹配"x",但不记得匹配 |
复杂模式-量词
匹配符 | 含义 |
---|---|
x* | 将前面的项“x”匹配0次或更多次 |
x+ | 将前面的项“x”匹配1次或更多次 |
x? | 将前面的项“x”匹配0次或1次 |
x{n} | n是一个正整数,相当于匹配连续n个x |
x{n,} | n是一个正整数,相当于匹配至少连续n个x |
x{n,m} | n>=0,m>0,相当于匹配连续n到m个x |
x*? x+? x?? x{n}? x{n,}? x{n,m}? |
默认情况下,像 * 和 + 这样的量词是“贪婪的”,这意味着它们试图匹配尽可能多的字符串。?量词后面的字符使量词“非贪婪”:意思是它一旦找到匹配就会停止。
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通