正则表达式
正则表达式提供一种字符匹配模式,用于匹配符合模式的字符串,对字符串进行筛选,替换等操作
正则表达式中有三种常用的元素:修饰符,匹配符,方法,。
正则均是以/开始,以/结尾的
正则定义的方式为:
var reg = new RegExp("/\D/")
或
var reg = /\D/
以第二种方式居多,此处暂时不用考虑/\D/是什么意思,只需知道参数的位置和是否需要引号
修饰符
g 全局匹配,匹配整个字符串,如果使用默认则匹配到第一个字符串后就返回,不继续匹配了
i 忽略大小写
m 多行匹配
匹配符
匹配符用于指定匹配规则,常用的匹配符如下:
\:读作反斜杠,为转义字符
^: 匹配以。。。开头的字符
$:匹配以。。。结尾的字符
*:匹配前面紧邻的子表达式0次或多次
+:匹配前面紧邻的子表达式1次或多次
?:匹配前面紧邻的子表达式0次或1次
{n,m}:匹配前面紧邻的子表达式n次到m次
\d:匹配数字
\D:匹配非数字
\w:匹配字母数字下划线汉字
\W:匹配非字母数字下划线汉字
\s:匹配空格
\S:匹配非空格
\b:匹配独立部分
\B:匹配非独立部分
():分组符,特殊的,如(a)/1,/1表示匹配从左往右第一个括号的内容,即匹配结果为aa
[]:匹配其中规则的任意一个
|:或
.:匹配任意字符
?:X:(这里是一个问号+一个冒号)非获取匹配,即不会单独匹配X
?=X:向右匹配X
方法
正则中常用的方法有以下几种:
test()用于判断是否存在匹配字符串,有则返回true,无则返回false
var str = '123456s'
var reg = /\D/
console.log(reg.test(str))
//true
search() 匹配字符串,并返回匹配到的字符串的开始位置(索引),没匹配到则返回-1
var str = 'abcdef';
var reg = /b/;
console.log(str.search(reg))
match() 查找字符串中符合规则的内容,成功则返回内容(保存到一个数组),失败则null
var str = 'dahdsa123adasda456adad789'
var reg = /\d/g
console.log(str.match(reg))
replace()查找字符串中符合规则的内容,并替换成指定字符串,但是不能替换相应的字符串长度;替换内容也可以是一个函数
var str = '你好张三:你是123'
var reg = /你好|你是/g
console.log(str.replace(reg, 'hello'))
下面是一些常见的正则表达式
转译字符的用法
var str = '2018/7/11'
var reg1 = /\d\/+/g // 匹配一个数字,一个或多个/(此处\将/转译为了有效字符,),全局匹配
var reg2 = /(\d\/)+/g // 匹配一个数字和一个/,整体一个或多个,全局匹配
var reg3 = /(\d)+(\/)+/g// 匹配一个或多个数字,一个或多个/,全局匹配
console.log(str.match(reg1))
console.log(str.match(reg2))
console.log(str.match(reg3))
匹配HTML字符串
var str = '<div class="b">hahahah </div>'
var reg1 = /<[^>]+>/ // 匹配一个<,一个或多个任意不是>的字符,一个>
var reg2 = /<[\w\W]+>/g // 匹配一个<,一个或多个任意字符,一个>
console.log(str.match(reg1))
console.log(str.match(reg2))
匹配独立字符串
var str1 = 'onetwo'
var str2 = 'one two'
var reg = /one\b/ //匹配独立的one
console.log(reg.test(str1))
console.log(reg.test(str2))
查找一个字符串中重复次数最多的字符
var str = 'assssjdssskssalsssdkjsssdss';
var arr = str.split('');
str = arr.sort().join('');
var value = '';
var index = 0;
var re = /(\w)\1+/g; //匹配字符,且重复这个字符,重复次数至少一次。
str.replace(re,function(a,b){
if(index<a.length){
index = a.length;
value = b;
}
});
consol.log('最多的字符:'+value+',重复的次数:'+index);
判断字符串是否是qq
var qq = '1465799166'
var reg = /^[1-9]\d{4,11}$/ // 匹配1~9开头,4到11位数字结尾
console.log(reg.test(qq))
去首尾空格
var str1 = ' abc '
var reg = /^\s+|\s+$/ // 匹配以一个或多个空格开头或一个或多个空格结尾
var str2 = str1.replace(reg,'')
console.log(str1)
console.log(str2)