var re = new RegExp();
正则表达式是一个对象,RegExp是regular(正则)和expression(表达式)合并起来的意思,跟Array一样,可以用new操作符来创建,这样没任何意义,console.log(re)返回结果为/(?:)/
一般我们需要将正则表达式的内容作为字符串传递出去,如:
var re1 = new RegExp('a')
这里的re1将匹配字母a
var re2 = new RegExp('a','i')
这行代码表示匹配字母a,i代表ignore,忽略大小写
正则表达式有两个特殊的符号,'^','$'。它们的作用分别是指出一个字符串的开始和结束
如:
“^hello”:表示所有以“hello”开始的字符串("hellosd","hello sfsfs"等);
“haha$”:表示所有以“haha”结尾的字符串;
“^world$”:表示开始和结尾都是“world”的字符串,这个只有“world”自己本身了
“what”:表示任何包含“what”的字符串
还有三个特殊符号“*”,“+”,“?”,它们分别表示“没有或更多”,“一次或更多”,“没有或一次”
如:
“ab*”:表示一个字符串有一个a后面跟着0个或若干个b(“a”,"ab","abbbb",......)
“ab+”:表示一个字符串有一个a后面跟着1个或若干个b(“ab”,“abb”,"abbbbb",......)
“ab?”:表示一个字符串有一个a后面跟着0个或1个b(“a”,“ab”)
“a?b+$”:表示在字符串的末尾有0个或1个a跟着1个或几个b
同样的,我们也可以使用范围,用大括号括起,用以表示重复次数的范围。
“ab{2}”:表示一个字符串有一个a跟着2个b(“abb”)
“ab{2,}”:表示一个字符串有一个a跟着至少2个b
“ab{3,5}”:表示一个字符串有一个a跟着3到5个b
这里我们需要注意的是,我们必须指定范围的下限(如:“{0,2}”而不是“{,2}”)
“*”相当于“{0,}”
“+”相当于“{1,}”
“?”相当于“{0,1}”
正则的常用方法:
1.test():在字符串中查找符合正则的内容,若查找到返回true,反之返回false
用法:正则.test(字符串)
如:判断是否是手机号
var str = '18682346888'
var re = /^[1]\d{10}$/
console.log(re.test(str))//true
2、search():在字符串搜索符合正则的内容,搜索到就返回出现的位置(从0开始,如果匹配的不只是一个字母,那只会返回第一个字母的位置),如果搜索失败返回-1
用法:字符串.search(正则)
var str = 'aefgvbefgefgefbg'
var re = /B/i
console.log(str.search(re))//5
3.match()在字符串中搜索符合规则的内容,搜索成功就返回内容,格式为数组,失败就返回null。
用法:字符串.match(正则)
量词:+至少出现一次 匹配不确定的次数(匹配就是搜索查找的意思)
全局匹配:g--global(正则中默认,只要搜索到符合规则的内容就会结束搜索)
如:
var str = 'sa123sd23442ggd435465lh654'
var re = /\d+/g
console.log(str.match(re))//["123","23442","435465","654"]
4、replace():查找符合正则的字符串,就替换成对应的字符串,返回替换后的内容
用法:字符串.replace(正则,新的字符串/回调函数)(在回调函数中,第一个参数指的是每次匹配成功的字符)
|:或的意思
var str = '我爱你中国,中国是好样的,中国人很棒棒'
var re = /中国|好样的/g
var newStr = str.replace(re,function(param){
var result = ''
for(var i = 0;i<param.length;i++){
result+= '*'
}
return result
})
console.log(newStr)//我爱你**,**是***,**人很棒棒
console.log(str)//我爱你中国,中国是好样的,中国人很棒棒
从结果可以看出,原字符串并没有变化
总结常用的符号:
\s:空格
\S:非空格
\d:数字
\D:非数字
\w:字符(字母、数字、下划线)
\W:非字符
.:任意字符
\.:这里的反斜杠代表转义,代表真正的.
*:0次或若干次,相当于{0,}
+:1次或若干次,相当于{1,}
?:0次或1次,相当于{0,1}
{n,m}:至少n次,至多m次
{n,}:至少n次
{n}:正好n次