JavaScript 正则表达式

来源:互联网 发布:动态海报制作软件 编辑:程序博客网 时间:2024/06/09 23:35
正则表达式API:
http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin
                             
什么是正则表达式?

        正则表达式(Regular Expression)是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
  简单来说:使用特定的符号所描述的一种规则,通常被用来检索、替换那些符合某个模式(规则)的文本

举例:
用户名只能输入 数字、字母、下划线 ,同时数字不可以作为开头,同时长度必须在6-20之间
var str = username;if( /^[a-zA-Z]\w+$/.test(str) ){     //符合规则}
为什么要使用正则表达式?

最主要的是可以大量的节省验证的工作量,正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
如何创建正则表达式?

第一种:
var reg = new RegExp("google", "gi");
第二种使用  /regstr/gi:
/google/gi.test(str)
reg  代表了一种规则
reg.test("xxxx")    代表了使用该规则对字符串进行校验

字符串的match方法

var pattern = /good/ig; var str = 'good good study!,day day up!';console.log(str.match(pattern)); console.log(str.match(pattern).length); 

使用 search 来查找匹配数据
var pattern = /good/ig;var str = 'good good study!,day day up!';console.log(str.search(pattern));

使用 replace 替换匹配到的数据
var pattern = /Good/ig;var str = 'good good study!,day day up!';console.log(str.replace(pattern, 'hard')); 

日期处理
"2017&08&08".replace(/\d+\D/g, function(matched, index, str){    //matched : 【2017&,08&】    //index : 【0,5】    return ""; //返回内容将替换匹配内容})"2017&08@08".replace(/(\d+)(\D)/g, function(matched, sub1,sub2, index, str){    console.log(matched, sub1, sub2);  //【2017&,2017, &】【08@,08,@】    return sub1+"-";})"2017&08@08".replace( /\D/g , "-" );
选择器
function $$(selector) {if(selector === undefined) return;var match = null;//#idif(match = selector.match(/^#(.+)/)) {return document.getElementById(match[1]);}//.classif(match = selector.match(/^\.(.+)/)) {return document.getElementsByClassName(match[1]);}//divif(match = selector.match(/^([a-zA-Z]+[0-9]?)$/)) {return document.getElementsByTagName(match[1]);}//div[index = 1]if(match = selector.match(/^([a-zA-Z]+[0-9]?)\[(.+)\=(.+)\]/)) {console.log(match);var eles = Array.from(document.getElementsByTagName(match[1].trim()));var res = eles.filter(function(item, index, arr) {return item.getAttribute(match[2].trim()) == match[3].trim();});return res;}}

日期显示
setInterval(function(){    var nowstr = new Date().toLocaleString();    var res = null;    var reg = /\d/g;    var arr = [];    while(res = reg.exec(nowstr) ){        arr.push(res[0]);    }    console.log(arr)},1000)setInterval(function(){    console.log( new Date().toLocaleString().match(/\d/g) );},1000)

. 表示任意字符
var pattern = /g..gle/; var str = 'google';console.log(pattern.test(str));


匹配次数问题
*        表示任意次 0 或多次
?       表示匹配1次或0次     
+        表示至少1次
{m,n}    表示m次到n次
{m,}     表示至少m次
{m}      表示匹配m次

字符匹配
[a-zA-Z0-9]    列举所有符合的情况,当情况过多时,使用-表示范围

  ^        开始
 $         结束
 \d        数字
 \D       非数字
 \w       数字字母下划线
 \W      非数字字母下划线
 \s       空白字符

校验是否全由数字组成
function isnumber(num){    if(typeof num == "string" || typeof num == "number"){        return /^\d+$/.test(num);    } else {        throw new Error("参数类型错误!,必须为数字或字符串");    }}

校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”
var reg = /^\+?(\d+-?)*\d+$/;
检查邮政编码     //共 6 位数字,第一位不能为 0
/^[1-9]\d{5}$/
检查文件压缩包  //xxx.zip\xxx.gz\xxx.rar\xxxx.7z\xxx.tar
/^.+\.(zip|gz|rar|7z|tar)$/

删除多余空格  //
str.replace( /\s+/g , "");

删除首尾空格
str.replace( /(^\s+)|(\s+$)/, "")
电子邮件( xxxxx @ xxxx(.xxxx)+)
/^[^@\s\?]+@[^@\s\?]+(\.[^@\s\?]+)+$/
      
手机号  1 3|5|8|7|4
/^1(3|5|8|7|4)\d{9}$/

身份证  
/\d{17}[0-9X]/

日期  (xxxx-xx-xx| xxxx/xx/xx | xxxx.xx.xx)
/\d{4}([-_\.#\s]\d{2}){2}/

 匹配中文
[\u2E80-\u9FFF]


账户名只能使用数字字母下划线,且数字不能开头,长度在6-15之间
/^[a-zA-Z_]\w{5,14}$/

将所有的bag、beg、big和bog改为bug
article.replace( /\sb[aeio]g\s/, " bug ");

将所有方法foo(a,b,c)的实例改为foo(b,a,c)
code.replace( /foo\(([^,]+),([^,]+),([^,]+)\)/, function(matched, g1, g2, g3){    return "foo("+g2+","+g1+","+g3+")";} )

假设有一个多字符的片断重复出现,例如:

Billy tried really hard
Sally tried really really hard
Timmy tried really really really hard
Johnny tried really really really really hard
而你想把"really"、"really really",以及任意数量连续出现的"really"字符串换成一个简单的"very"
str.replace(/(really\s)+/g,"very ");

练习
var myReg = /(\w+)\s(\w+)/i;var str = "John Smith";var newstr = str.replace(myReg, "$2 $1");document.write(newstr);

//敏感词过滤function strfilter(target) {var words = ["SB", "TMD", "WQNMLGB", "GCD", "89.64"];for(var i in words) {var reg = new RegExp(words[i], "gi");var stars = "";for(var k = 0; k < words[i].length; k++) {stars += "*";}return target.replace(reg, stars);}}




原创粉丝点击