正则表达式
2017-03-05 15:32
148 查看
正则表达式
任何编程语言都内置了对正则表达式的支持。那么是正则表达式呢?Regular Expression 使用单个字符串来描述、匹配一系列符合语法规则的字符串。简单说就是按照某种规则去匹配符合条件的字符串。
正则表达式的写法
/规则/ (这种写法效率更高)new RegExp(‘字符串的规则’,’修饰符’);
元字符
{([\^$|?*+.])} 使用所有元字符都必须进行转义^
表示正则开始
$
表示正则结束
[]
里面可以为任意一个字符
?
最小可以没有,最多可以有一个
()子项、提权
从左往右依次计算。只要正则有子项,那么replace回调函数的第二个参数就是匹配到的子项(不在是索引)
范围
[\u4e00-\u9fa5]表示中文区间范围例如:计算下面字符串的字节长度?(中文为3个字节,英文为1个字节)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>计算字符串字节长度</title> </head> <body> <script type="text/javascript"> var num = 0; var str = '你好,世界!Hello world'; for(var i = 0,len = str.length;i < len;i++){ /*str[i]在IE6下不兼容,所以选用charAt(i)*/ if(/[\u4e00-\u9fa5]/.test(str.charAt(i))){ num+=3; }else{ num++; } } console.log(num); </script> </body> </html>
运行结果如下所示:
修饰符
i 不区分大小写g 全局匹配,并不是发现第一个匹配项立即停止
m 多行模式 到一行文本的末尾时,还会查找下一行是否有匹配的项
正则的方法
test查看正则表达式与指定的字符串是否匹配,如果匹配返回true,不匹配返回false
语法 :RegExp.test(str)
match
将匹配到的字符放到一个数组中
语法 :str.match(RegExp) 字符串方法
search
找到字符串中指定字符(正则)的位置,找到了返回位置,没找到返回-1.类似于字符串方法indexOf().
replace
将字符串指定的字符(正则)替换成另外的字符
语法 :str.replace(要替换哪个,替换成什么(正则),回调函数)
注意 回调中必须写return,否则会变成undefined.如果只传一个参数,那么匹配到的字符就会被替换成undefined.
<script type="text/javascript"> var str = 'kkijuyhgtKiokdef'; var s = str.replace(/k/gi,function($0,$1,$2,$3,$4){ /* $0 正则每次匹配的字符 $1 每次匹配到字符的位置 $2 整个字符串 */ //console.log($0); // 四个k //console.log($1); // 0 1 9 12 //console.log($2); // kkijuyhgtKiokdef //console.log($3); //undefined console.log($4); //undefined return '换'; }) console.log(s); //换换ijuyhgt换io换def </script>
敏感词替换的小例子
<script type="text/javascript"> var str = '习近平会见候任联合国秘书长古特雷斯'; var s = str.replace(/习近平|古特雷斯/g,function($0){ var temp = ''; for(var i = 0; i<$0.length;i++){ temp+='*'; } return temp; }); console.log(s); </script>