JS正则道道也很多

   正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式,可用于文本搜索和文本替换。具体的表现形式 /正则表达式主体/修饰符(可选) 或者 new RegExp(正则表达式主体,修饰符) 或者 new RegExp(正则表达式) 或者 new RegExp(正则表达式,修饰符)(ES6的新许可,但是修饰符会覆盖正则表达式的修饰符);其中表达式主体比较复杂去匹配字符串或语句,修饰符就是表示匹配的模式:i(对大小写不敏感),g(全局匹配),m(多行匹配),u(用于处理含有大于\uFFFF的字符),y(类似全局匹配,但是比较矫情,下一次匹配必须匹配成功不然返回null),s用于匹配任意字符;注意每次匹配的lastIndex它的初始值为-1表示从头匹配,每次成功匹配会导致lastIndex变化,这就会导致有的时候会出现问题具体问题等你碰到坑。

    正则表达式中的元字符,^( 开头,不能紧跟左中括号后面) ,$(结尾),(str)(表示一个字符串或者分组),[str](表示str中的任意一个字符),{n}(表示重复0次或n次),|(或),?(重复0次或一次),+(重复1次或n次),*(重复0次或n次),\(转译字符,用来搞定特殊字符);大致可以表示为/^abc$/匹配abc,[a-zA-Z]表示任意单词字符,然后具体的测试自己去写,我写的累。对于一些匹配的预定义的特殊字符换行符什么的:\t(制表符),\n(换行符),\r(回车符),\f(换页符),\a(alert符),\e(escape符),\cx(与X对应的控制字符),\b(与回退字符),\v(垂直制表符),\0(空字符)。其中注意的是[^str]表示的可不是在这个开头的任意一个字符而是对这个字符串的任意字符的非操作。接下来的操作就是对上面的一些正则表达式组合的简写形式,. == [^\n\r]表示除换行和回车的任意字符,\d==[0-9]表示任意数字字符,\D==[^0-9]表示非数字字符,\s==[\t\n\x0B\f\r]表示空白字符,\S == [^\t\n\x0B\f\r]表示非空白字符,\w==[a-zA-Z_0-9]表示任意单词字符,\W == [^a-zA-Z_0-9]表示非单词字符。/[\u4e00-\u9fa5]/用于匹配单个汉字。\b表示单词边界,\B非单词边界。

     正则表达式中的量词,?匹配0次或1次,*匹配0次或n次,+匹配1次或n次,{n}匹配0次或n次,{n,m}匹配n次到m次,{n,}匹配n次或n次以上。就是判断是否由多个相同的字符,正常情况下这些量词的匹配模式是贪婪模式,就是一开始就匹配所有的然后排除里面不匹配的元素这是正常模式一般不用考虑;惰性模式就是在这些量词之后加上个?表示先从最低要求匹配,匹配满足就一直往高的走直到匹配不了;支配性模式就是在量词后面加个+,表示从最低要求匹配,匹配满足之后再尝试匹配一次就停止匹配。

      正则表达式中的反向引用,用正则表达式中的匹配组捕获的子字符串,就相当与给匹配的字符串中的某一匹配片段赋给某个变量名,变量名大致对应 “\ 编号”==》/(dog)\1/.test("dogdog");RegExp.$1==dog;还有就是一种非捕获性分组就是分组的左括号后面加个?:,跟正常匹配貌似没什么区别。先行断言:(?=exp)在exp前面的位置匹配,(?!exp)在后面匹配不是exp的位置,(?<=exp)匹配exp后面的位置不支持,(?<!exp)匹配前面不是exp的位置不支持;然后好像根据最新版的ES出了一个后行断言,跟先行断言相反,先行断言讲究根据后面exp是否匹配前面的字段,而后行断言就是根据前面的exp是否匹配后面的字段。

      正则表达式中提供的方法,test,exec,match,replace,search,replace,具体方法作用一个个试一下;正则表达式的属性flags返回正则表达式的修饰符,sticky表示是否设置了y修饰符,dotAll属性表示是否设置了s修饰符。

      正则表达式的新的扩展,提供了一种新的类的写法\p{...}和\P{...},可以让正则表达式匹配符合unicode某种属性的所有字符,但是是一种提案,实没实现不知道;具名组提案,为分组匹配的各个分组命名(?<name>str),通过这些命名去调用匹配到的字符串,根据这个具名组提案,可以直接把解构赋值直接拉进来进行解构赋值,同时根据\k<name>\ 直接根据这个名字去匹配上一个对应名字的正则式。

     反正正则里面道道很多,各种乱七八糟的组合就搞出很乱的事情。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容