正则表达式
1.\1的意思
正则表达式中的小括号"()"。是代表分组的意思。 如果再其后面出现\1则是代表与第一个小括号中要匹配的内容相同。
注意:\1必须与小括号配合使用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <script> /* 查找两个相邻的重复的单词 */ var str = "Is is the cost of of gasoline going up up"; var patt1 = /\b([a-z]+) \1\b/ig; document.write(str.match(patt1)); /* 输出结果为Is is,of of,up up */ </script> </body> </html>
2.?: ?= 和 ?!
用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。
其中 ?: 是非捕获元之一,还有两个非捕获元是 ?= 和 ?!,这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。
理解:?: ?= 和 ?!都与圆括号一起使用来消除圆括号造成的匹配缓存。同时,
?=可以用于提高查找效率,先找到匹配圆括号内正则表达式的字符串,再以此位置开始,匹配圆括号后的正则表达式。
eg:想匹配一个“人”字,但是你只想匹配中国人的人字,不想匹配法国人的人:(?=中国)人
?!可以用于排除不希望出现的情况。
eg:匹配8到16位数字和字母密码的正则表达式:^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$
解释:开头和结尾的^和$匹配整个字符串
开头的^和第一个括号中的$匹配整个字符串,排除第一种不希望出现的情况:全部是数字。
开头的^和第二个括号中的$匹配整个字符串,排除第二种不希望出现的情况:全部是字母。
[0-9A-Za-z]{8,16}数字和字母的8到16位组合。