码迷,mamicode.com
首页 > 其他好文 > 详细

【学】正则表达式的一些应用

时间:2016-08-10 22:48:32      阅读:329      评论:0      收藏:0      [点我收藏+]

标签:

找出所有数字:

var str =‘1asdf,s42df,df456sdf‘;
var re = /\d+/g; // \d数字
console.log(str.match(re));

校验年龄(18岁到100岁): 
var re=/^(1[8-9]|[2-9]\d|100)$/

  • |符号表示或
  • 这里分别用18到19,20到99,以及100进行了分组校验,用|来分割,但是这个符号的优先级很低,所以要把2次或的运算结果都计算出来后再加上^$

座机号码验证: 
可以有区号,区号0开头,区号可以3位可以4位,后面可以跟-或者不跟 
var re=/^(0[1-9]\d{1,2}\-?)?[1-9]\d{6,7}$/;

  • ^不能出现在()里,而要在外面
  • ?表明没有或者有1个
  • 不要忘了开始^$结尾

邮箱校验: 
比如alex@qq.com, 
var re=/^\w+@\w+\.[a-zA-Z]{1,3}(\.[a-zA-Z]{1,2})?$/;

  • \w单词英文数字下划线,相当于[a-zA-Z0-9_]
  • 最后可能会出现2个点,但是不会有3个点,所以最后一段是可有一个或者没有的,但是字数不超过2个

合并2边的空格:

var str=‘ i love you ‘;
alert(‘|‘+trim(str)+‘|‘);
function trim(s){
return s.replace(/^\s+|\s+$/g,‘‘);
}

合并中间空格:

var str=‘i love you‘;
//合并中间空格
str=str.replace(/\s+/g,‘ ‘);//方法一,把所有多余的空格都替换成1个空格
str=str.match(/\S+/g).join(‘ ‘);//方法二,把所有非空格的字符找出来放进数组再拼成string
str=str.split(/\s+/g).join(‘ ‘);//方法三

校验中文: 
var re=/^[\u4e00-\u9fa5]+$/ 
中文字符十六位进制区间// 0x4e00----0x9fa5 
用转义表示就是\u4e00-\u9fa5


用正则来封装getByClass函数

function getByClass(obj,sClass){
if(obj.getElementsByClassName){
return obj.getElementsByClassName(sClass);
}
var arr = obj.getElementsByTagName(‘*‘);
var result = [];
var re = new RegExp(‘\\b‘ + sClass + ‘\\b‘);
for (var i=0; i<arr.length; i++) {
if(re.test(arr[i].className)){
result.push(arr[i]);
}
}
return result;
}

注意点

  • 利用了正则的边界\b,但是这里为什么不能用perl的语法,而要用new RegExp的方式呢?是因为中间sClass是一个变量,无法写在perl语句中,perl中的字符串是不能加引号的
  • 而在js中单单写\b是一个转义,要在前面再加一个\才行
  • 注意正则的test()方法是正则对象调用的,参数里放string,返回的是一个boolean
  • 这个方法效率是挺高,但是有bug,因为在正则中-符号也算是一个边界,这样导致active-one这样的类也会被选中,这个问题在jQuery中也有。所有为了正确性,还是推荐用原来封装的函数。

仿jQuery的操作class

//判断obj是否含有sClass类
function hasClass(obj,sClass){
var re=new RegExp(‘\\b‘+sClass+‘\\b‘);
return re.test(obj.className);
}
 
//给obj添加sClass类
function addClass(obj,sClass){
var re=new RegExp(‘\\b‘+sClass+‘\\b‘);
if(!re.test(obj.className)){
obj.className += ‘ ‘ + sClass;
}
}
 
//删除obj的sClass类
function removeClass(obj,sClass){
var re=new RegExp(‘\\b‘+sClass+‘\\b‘);
if(re.test(obj.className)){
obj.className = obj.className.replace(re,‘‘);
if(!obj.className){
obj.removeAttribute(‘class‘); //删除掉sClass之后再判断该obj的class是否为空,如果是,就把这个obj的class也删除
}
}
if(obj.className){
obj.className = obj.className.replace(/^\s+|\s+$/g,‘‘).replace(/\s+/g,‘ ‘);
}
//这段相当于再整理一下class,把前后的空格和中间的空格都去掉
}
 
//如果obj有sClass,就删除,否则就添加sClass
function toggleClass(obj,sClass){
hasClass(obj,sClass)?removeClass(obj,sClass):addClass(obj,sClass);
}

【学】正则表达式的一些应用

标签:

原文地址:http://www.cnblogs.com/bluefantasy728/p/5759005.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!