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) 具名捕获组。匹配"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}?
默认情况下,像 * 和 + 这样的量词是“贪婪的”,这意味着它们试图匹配尽可能多的字符串。?量词后面的字符使量词“非贪婪”:意思是它一旦找到匹配就会停止。

例如,给定一个字符串 “some <foo> <bar> new </bar> </foo> thing”
/<.*>/ will match "<foo> <bar> new </bar> </foo>"
/<.*?>/ will match "<foo>"</td>

posted @   qiao101  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示