JavaScript学习(3)--RegExp 类(正则表达式)(3)

贪婪和惰性

1.贪婪匹配(greedy)

         贪婪匹配(greedy)会匹配尽可能多的字符。它首先看整个字符串,如果不匹配,对字符串进行收缩;遇到可能匹配的文本,停止收缩,对文本进行扩展,当发现匹配的文本时,它不着急将该匹配保存到匹配集合中,而是对文本继续扩展,直到无法继续匹配或者扩展完整个字符串,然后将前面最后一个符合匹配的文本(也是最长的)保存起来到匹配集合中。所以说它是贪婪的。

如下:例1:var pattern = /[a-z]+/;   //使用了贪婪匹配,会替换所有能匹配的文本

var str = 'abcdefjhijklmnopqrstuvwxyz';

var result = str.replace(pattern, 'xxx'); //替换了最长的能够匹配的文本

alert(result); // xxx

例2:varpattern = /8(.+)8/g;       //使用了贪婪匹配,会替换所有能匹配的文本

var str = 'This is 8google8, That is 8google8, There is 8google8';

var result = str.replace(pattern,'<strong>$1</strong>');//替换了最长的能够匹配的文本

document.write(result); // This is google8,That is 8google8, There is 8google

2. 惰性匹配(lazy)

惰性匹配(lazy)会匹配尽可能少的字符,它从第一个字符开始找起,一旦符合条件,立刻保存到匹配集合中,然后继续进行查找。所以说它是懒惰的。

贪 婪

惰 性

+

+?

?

??

*

*?

{n}

{n}?

{n,}

{n,}?

{n,m}

{n,m}?

 

如下:例1:var pattern = /[a-z]+?/;   //?号关闭了贪婪匹配,只替换了第一个

var str = 'abcdefjhijklmnopqrstuvwxyz';

var result = str.replace(pattern, 'xxx'); //替换了第一个可以匹配的文本

alert(result); // xxxbcdefjhijklmnopqrstuvwxyz

例2:varpattern = /8(.+?)8/;       //?号关闭了贪婪匹配

var str = 'This is 8google8, That is 8google8, There is 8google8';

var result = str.replace(pattern,'<strong>$1</strong>');//替换了第一个够匹配的文本

document.write(result); // This is google,That is 8google8, There is 8google8

例3:惰性匹配和全局相结合

var pattern = /8(.+?)8/g; //禁止了贪婪,开启的全局

var str = 'This is 8google8, That is 8google8, There is 8google8';

var result = str.replace(pattern,'<strong>$1</strong>');

document.write(result); // This is google,That is google, There is google

常用的正则

1.检查邮政编码(共6位数字第一位不能为0)

var pattern =/[1-9][0-9]{5}/;  //共 6 位数字,第一位不能为 0

var str ='224000';

alert(pattern.test(str));//true

2.检查文件压缩包(也可以检测其他文件)

var pattern =/[\w]+\.zip|rar|gz/; //\d\w_表示所有数字和字母加下划线

var str ='123.zip'; //\.表示匹配.,后面是一个选择

alert(pattern.test(str));//true

3.删除多余空格

var pattern =/\s/g; //g 必须全局,才能全部匹配

var str = '111222 333';

var result =str.replace(pattern,''); //把空格匹配成无空格

alert(result);

4.删除首尾空格

var pattern =/^\s+/; //强制首

var str = ' google ';

var result =str.replace(pattern, '');

pattern = /\s+$/;//强制尾

result =result.replace(pattern, '');

alert('|' +result + '|');

或者:var pattern = /^\s*(.+?)\s*$/; //使用了非贪婪捕获

var str = 'google ';

alert('|' +pattern.exec(str)[1] + '|');

或者:var pattern =/^\s*(.+?)\s*$/;

var str = 'google ';

alert('|' +str.replace(pattern, '$1') + '|'); //使用了分组获取

5.简单的电子邮件验证

var pattern =/^([a-zA-Z0-9_\.\-]+)@([a-zA-Z0-9_\.\-]+)\.([a-zA-Z]{2,4})$/;

var str ='yc60.com@gmail.com';

alert(pattern.test(str));//true

或者:var pattern =/^([\w\.\-]+)@([\w\.\-]+)\.([\w]{2,4})$/;

var str ='yc60.com@gmail.com';

alert(pattern.test(str));//true

或者:var reg = /^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.){1,4}[a-z]{2,3}$/;

6.手机号验证

var pattern = /(^0{0,1}1[3|4|5|6|7|8|9][0-9]{9}$)/;

var str = '18210553074';

alert(pattern.test(str));//true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值