正则表达式:简化普通字符串操作
操作字符串常用的函数:
search():返回要查找的字符串第一次出现的位置,查找不到时返回-1.
var str = 'abcdefg';
alert ( str.search('bc') ); //返回1
substring(startIndex,endIndex):返回对应位置的子字符串
alert ( str.substring(1,4) ); //返回’bcd’,不包含第4个字符
alert( str.substring(1)); //返回’bcdefg’返回从startIndex到末尾的子串
charAt(index) :返回字符串对应位置上的字符
alert ( str.charAt(2) ); //返回字符 ’c’
split():将字符串分割成一个字符串数组
var str ='abc-g-4-78-u';
var arr = str.split('-');
for(var i=0;i<arr.length;i++){
alert(arr[i]); //依次输出:’abc’ , ’g’ , ’4’ , ’78’ , ’u’
}
replace(‘a’ , ’b’):将字符串中第一个字符’a’替换为字符’b’
var str = 'abaaacdefg';
alert(str.replace('a','A'));//返回'Abaaacdefg',只替换了第一个
正则表达式(规则表达式):强大的字符串匹配工具
//-------------------------------------1:正则表达式的test()方法 -----------------------------------------------------//
//正则表达式对象:JS风格
var str='abcdefg';
var reg=new RegExp('a');
alert(reg.test(str));//返回true, test()方法,用来测试字符串是否具有符合某种规则的子串,有返回true,否则返回false
var str='Abcdefg';
var reg=new RegExp('a','i');//参数i:表示忽略大小写
alert(reg.test(str));//返回true
//正则表达式对象的另一种表示方式:perl(第一个引入正则的程序,比较古老)风格 var str='abcdefg';
var reg=/a/;
alert(reg.test(str));//返回true
var str1='Abcdefg';
var reg=/a/;
alert(reg.test(str1));//返回false
var str2='Abcdefg';
var reg=/a/i; //忽略大小写
alert(reg.test(str2));//返回true
//-------------------------------------------2:正则表达式与search()方法相结合 -----------------------------------// var str='abcdefg';
alert(str.search(/d/));//返回3
var str='as 43 hh';
alert(str.search(/\d/));//查找数字在str中首次出现的位置
var userAgent=window.navigator.userAgent;
alert(userAgent.search(/firefox/i));//不等于-1 就是firefox浏览器
//------------------------------------3:正则表达式的match()方法---------------------------------------------------// var str='13 f6 -g67 8 gg -=3' ;
//alert(str.match(/\d/)); //返回1,返回第一个匹配到的字符:'1'
//alert(str.match(/\d/g)); //返回一个字符数组: '1','3','6','6','7','8','3'
alert(str.match(/\d+/g)); //返回一个字符串数组: '13','6','67','8','3' 其中"\d+"表示多个数字
//-------------------------------------4:正则表达式与replace()方法相结合---------------------------------------//
//字符串方式
var str='abaacdAAfg';
alert(str.replace('a','T'));//将str中的'a'都替换成'A',返回替换后的字符串:'TbaacdAAfg'
//缺点:只替换第一个字符
//正则方式
var str='abaacAAfg';
alert(str.replace(/a/,'T')); //仍然只替换第一个'a'
alert(str.replace(/a/g,'T'));//但加上条件g,就替换了所有的'a'
alert(str.replace(/a/gi,'T'));//返回:'TbTTcdTTfg',忽略大小写替换
//网络敏感词过滤
(function(){
var filterPre=document.getElementById('txt1');
var filterAft=document.getElementById('txt2');
var btn=document.getElementById('btn1');
btn.onclick=function(){
var re=/我们|你们|他们/g; // '|' 代表 'or'
filterAft.value=filterPre.value.replace(re,'****');
}
})();
//------------------------------------5:正则表达式:字符类---------------------------------------------------------////----------------------------------方括号:[]-----------------------------------------------------//
//方括号'[]'用法一:或者,如: /1[abc]2/ 等价于 /1a2|1b2|1c2/,方括号匹配到的是一个字符
var str='1a2 abc 1c2 yj';
var re=/1[abc]2/g;
alert(str.match(re)); //返回字符串数组:'1a2','1c2'
//方括号'[]'用法二:范围,如: 数字/[0-9]/等价于/\d/ 、数字或小写字母/[0-9a-z]/
//方括号'[]'用法三:排除,如:[^a]表示除'a'之外的字符、[^\d]表示除数字之外的字符、[^a-z]表示除了小写字母之外的字符
//-----------------------------转义字符:. 、\d、\w、\s、\D、\W、\S--------------------// . 任意字符
\d digital 等价于[0-9],数字 ;
\D 等价于[^0-9]或[^\d]除了数字之外
\w word 等价于[a-zA-Z0-9_],即数字、字母或下划线 ;
\W 除了\w之外的字符
\s space 空白 ;
\S 除了空白之外
//---------------------------------------6:正则表达式:量词--------------------------------------------------------//
{n, m} 表示最少n次,最多m次
{n, } 最少n次,最多不限
{ ,m} 最少不限,最多m次
{n} 恰n次
//例如:QQ号:最少5位,最多11位,且第一位不为0 :匹配正则为:/[1-9]\d{4,10}/
' + ' 代表量词 {1,}
' * ' 代表量词 {0,} 不推荐使用
' ? ' 代表量词 {0,1}
//-------------------------------------------7:正则表达式的应用-----------------------------------------------//
//-----------------------检测邮箱--------------------------//
//规则:一串数字|字母|下划线 @ 一串英文|数字 . 一串英文(且长度为2-4位)
//每部分相应的正则: \w+ @ [0-9a-zA-Z]+ \. [a-zA-Z]{2,4}]
//因此得到正则表达式为:/\w+@[0-9a-zA-Z]+\.[a-zA-Z]{2,4}/
var str='秒回1dsdsf@163.comerfgh';
////var reg=/\w+@[0-9a-zA-Z]+\.[a-zA-Z]{2,4}/;
var reg=/^\w+@[0-9a-zA-Z]+\.[a-zA-Z]{2,4}$/
alert(reg.test(str)); //返回true,因为test()检测的是str中是否存在符合规则的字符串,有就返回true
//需要将修改reg为:reg=/^\w+@[0-9a-zA-Z]+\.[a-zA-Z]{2,4}$/
//--------------------'^' 代表行首; '$' 代表行尾-------------//
//行首和行尾还可以用来去前后空格:如下
var str1=' ffe df hgth ';
var reg=/^\s+/;
alert('('+str1.replace(reg,'')+')'); //返回('ffe df hgth ')
var reg1=/^\s+|\s+$/g;
alert('('+str1.replace(reg1,'')+')'); //返回('ffe df hgth')
//--------------------检测中文---------------------------------//
//[\u4e00-\u9fa5]: '\u':代表'utf-8'编码,'4e00'代表第一个汉字:'一','9fa5'代表最后一个汉字
//所以检测中文字符串使用正则:/^[\u4e00-\u9fa5]+$/
//-----------------------完美的getByClass---------------------//
/*
function getByClass(oParent,sClass){
var aEle=oParent.getElementsByTagName('*');
var aResult=[];
for(var i=0;i<aEle.length;i++){
//if(aEle[i].className==sClass){
if(aEle[i].className.search(sClass)!=-1){//但search()方法,对'abox'也返回true
aResult.push(aEle[i]);
}
}
return aResult;
}
*/
//单词边界:'\b'
function getByClass(oParent,sClass){
var aEle=oParent.getElementsByTagName('*');
var aResult=[];
var reg=new RegExp('\\b'+sClass+'\\b');
for(var i=0;i<aEle.length;i++){
//if(aEle[i].className==sClass){
//if(aEle[i].className.search(sClass)!=-1){//但search()方法,对'abox'也返回true
if(reg.test(aEle[i].className)){
aResult.push(aEle[i]);
}
}
return aResult;
}
<p>过滤前</p><textarea id="txt1" rows="10" cols="40"></textarea>
<p>过滤后</p><textarea id="txt2" rows="10" cols="40"></textarea>
//手机文本不支持HTML,手机上的小说都是纯文本
//偷小说(手机上的小说阅读网站是从后台把数据取过来,然后过滤掉HTML标签显示的)
(function(){
var filterPre=document.getElementById('txt1');
var filterAft=document.getElementById('txt2');
var btn=document.getElementById('btn1');
btn.onclick=function(){
//var re=/<.+>/g; //符号'.'表示任意一个字符 而'.+'表示许多个任意字符
//filterAft.value=filterPre.value.replace(re,'');
//转换后为空:原因:正则特点:贪婪,匹配的是尽可能长的字符串,
//所以匹配的是HTML文档中的第一个标签的'<'和文档末尾最后一个标签的'>'
//修改
var re=/<[^<>]+>/g; //即:<>里面不能再出现<>了
filterAft.value=filterPre.value.replace(re,'');
}
})();