javascript正则表达式的定义方法

2025-04-05 10:46:50

javascript正茸垂扌馔则表达式的2种定义方法:一种是直接调用RegExp(),第二种是直接用字面量来定义,即varre=/正则规则/;js正则表达式的2种定义方法本质都是调用Reg呶蓟鹭毵Exp()方法在调用同一段正则代码的时候,ECMAScript3和ECMAScript5中表现完全不一样functionreg(){varre=/\sjavascript/;returnre;}分别在ECMAScript3和ECMAScript5中调用reg()方法多次在ECMAScript3中,调用的是同一个RegExp对象,在ECMAScript5中,调用的是不同的RegExp对象因为在EXCMAScript5中每执行一次,就生成一个新的RegExp对象所以在ECMAScript3中会造成程序的隐患,因为只要在一个地方对这个对象进行修改的话,所有调用到这个对象的地方都会变化。1.直接量字符在正则中一般都会直接匹配字符,如/javascript/会直接匹配字符javascript还支持非字母的字符匹配,如:\o    NUL字符(\u0000)\t    制表符(\u0009)\n    换行符(\u000A)\v    垂直制表符(\u000B)\f    换页符(\u000C)\r    回车符(\u000D)\xnn  由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n\uxxxx 由十六进制数xxxx指定的Unicode字符,例如\u0009等价于\t\cX   控制字符^X,例如,\cJ等价于换行符\n在js正则表达式中,还有一些有特殊含义的标点符号,他们需要'\'来转义^$.*+?=!:|\/()[]{}2.字符类[...]方括号内的任意字符[^...]    不在方括号内的任意字符.      任意字符\w      任何ASCII字符组成的单词,等价于[a-zA-Z0-9]\W     任何不适ASCII字符组成的单词,等价于[^a-zA-Z0-9]\s      任何Unicode空白符\S      任何非Unicode空白符的字符,注意\w和\S不一样\d      任何ASCII数值,等价于[0-9]\D      除了ASCII数字之外的任何字符,等价于[^0-9][\b]     退格直接量(特例)3.重复(次数)?    0或1次+    1次或多次*    任意次{n}n次{m,n}最少m次,最多n次{n,}n次或n次以上正则默认是贪婪匹配的如[a+b+]如果要匹配aaabb,它不会匹配ab和aab等,只会匹配aaabb[a+?b+?]这个会匹配aaab为什么会产生这个区别呢?答:+?是让正则非贪婪匹配,那么b这里只会匹配一个b,那为什么a会匹配3个呢?这是因为正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。4.选项|分组|引用用于分隔可供选择的字符,如[ab|cd],他既可以匹配ab也可以匹配cd,注意:选择项的尝试匹配次序是左→右,因此[a|ab],当a匹配通过了之后,就不匹配ab了,就算ab是更好的匹配() 1.单独的项当成子表达式    /java(script)?/可以匹配javascript和java即圆括号部分形成子的表达式,可以对子表达式执行|*?等操作2.完整的模式中定义子模式   后面的可以引用前面圆括号起来的表达式/(['"])[a-z]\1/\1引用的是第一个圆括号里的表达式,因此引用了['"]3.后部引用前面的子表达式  注意: /['"][a-z]['"]/这个正则的意思是    单引号或双引号加上一个小写字母加上一个单引号或者双引号,前后的单双引号不是匹配的                                              如果你要匹配可以这么写[(['"])[a-z]\1]\加数字     可以引用前面圆括号中的表达式    5.制定匹配位置(锚点)^    匹配字符串的开头,在多行检索中,匹配一行的开头$    匹配字符串的结尾,在多行检索中,匹配一行的结尾\b   匹配一个单词的边界,简言之,就是位于字符\w和\W之间的位置,或位于字符\w和字符串的开头或者结尾之间的位置\B   匹配非单词边界的位置(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符(?!p)  零宽负向先行断言,要求接下来的字符不与p匹配6.修饰符写在正则表达式字面量//右侧的i        执行不区分大小写的匹配g       执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止m       多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束/java$/m可以匹配java\nfunc注意:当javascript正则表达式是全局的时候,每次exec()和test()的时候都会把当前设置的lastIndex设为当前的位置,再次执行的时候就会从lastIndex的位置开始执行,因此最好每次执行的时候lastIndex设置为0。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢