正则表达式---简化字符串操作
2016-04-02 22:42
267 查看
正则表达式:简化普通字符串操作
操作字符串常用的函数:
search():返回要查找的字符串第一次出现的位置,查找不到时返回-1.
substring(startIndex,endIndex):返回对应位置的子字符串
charAt(index) :返回字符串对应位置上的字符
split():将字符串分割成一个字符串数组
replace(‘a’ , ’b’):将字符串中第一个字符’a’替换为字符’b’
正则表达式(规则表达式):强大的字符串匹配工具
//-------------------------------------1:正则表达式的test()方法 -----------------------------------------------------//
//正则表达式对象:JS风格
//-------------------------------------4:正则表达式与replace()方法相结合---------------------------------------//
//----------------------------------方括号:[]-----------------------------------------------------//
//---------------------------------------6:正则表达式:量词--------------------------------------------------------//
//-------------------------------------------7:正则表达式的应用-----------------------------------------------//
操作字符串常用的函数:
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,''); } })();
相关文章推荐
- Swift 基础语法
- CSS选择器
- Hive表的数据载入方式
- Futurice公司Android开发者总结的经验教训
- 商人小鑫
- 嵌入式
- Struts的Action中获取Request和response对象
- 来自自身的信息——“灵魂暗夜”
- OpenNLP进行中文命名实体识别(上:预处理及训练模型)
- 2016腾讯实现生招聘在线笔试总结(移动开发)
- JS实现全选、不选、反选
- 设计模式
- 基于py3和pymysql查询某时间段的数据
- leetcode_010 Regular Expression Matching
- 腾讯笔试+查漏补缺
- BC#78Div.2 1001
- iOS——图片的两种加载方式
- SpringMVC返回json数据的三种方式
- 三、安卓UI学习(1)
- Oozie 报错的解决方法