标签:
首先用一个例子来引入正则表达式
现有一个字符串str = "12,89 79 -ddf e dd 89 ff76 9" 要求找出其中所有的数字,纯用JS去写代码如下
1 <script> 2 var str = ‘12,89 79 -ddf e dd 89 ff76 9‘; 3 var arr = []; 4 var num = ‘‘; 5 6 for(var i = 0 ; i < str.length ; ++i){ 7 if(str.charAt(i) >= ‘0‘ && str.charAt(i) <= ‘9‘) num += str.charAt(i); 8 else{ 9 if(num){ 10 arr.push(num); 11 num = ‘‘; 12 } 13 } 14 } 15 if(num) arr.push(num); 16 alert(arr); 17 </script>
我们会发现实现这样一个功能所用代码会非常长 ,如果使用正则的话代码会非常简洁,如下
1 <script> 2 var str = ‘12,89 79 -ddf e dd 89 ff76 9‘; 3 var re = /\d+/g; 4 5 alert(str.match(re)); 6 </script>
举上个引例的目的就是说明正则表达式会使我们对字符串的操作变得异常简洁。
正则表达式
正则表达式(规则表达式)的概念就是我们按照一定的"语法"自己定义一些规则告诉计算机如何处理字符串。要注意的是正则表达式只能用来处理字符串。
RegExp对象
RegExp对象是JS中的对象,语法格式如下:new RegExp(pattern, attributes); 其中pattern就是正则表达式 , attributes为可选属性(下面再具体讲)。
上述引例就可以写成 var re = new RegExp("\d+","g"); alert(str.match(re));
当然也可以写成 var re = /pattern/attributes;这样的形式 ,这是perl的代码风格。
相比较而言perl的风格会更简洁一点,这和我们平时用数组时差不多,不会每次都去new Arry() , 直接arr = [];就可以了。
具体说一下pattern和attributes
1、attributes
例子:
1 // i 执行对大小写不敏感的匹配 2 var str = ‘aaaaAAAA‘; 3 var reI = /a+/; 4 var reI2 = /a+/i; 5 alert(str.match(reI)); //输出aaaa 6 alert(str.match(reI2)); //输出aaaaAAAA 7 8 //g 全局匹配 9 var reG = /a/; 10 var reG2 = /a/g; 11 alert(str.match(reG)); //a 12 alert(str.match(reG2)); //a,a,a,a
2、pattern
正则表达式的内容非常灵活,由自己的需求而定。主要常见的有
字符类,用于查找某个范围内的字符
这边要注意的是[abc]中指的都是单个字符,它们之间都是或的关系, 例如有正则表达式 var re = /1[abc]2/; 其等价于 var re = /1a2|1b2|1c2/;
转义字符(也称为元字符,是拥有特殊含义的字符)
注意\w包括的范围是(a-z , A-Z ,0-9,下划线);
量词(表示量词前的字符可以出现的频率)
常用的有
* 任意次,即{0,}
? 零次或一次{0,1}
+ 一次或任意次{1,}
^n 匹配开头为n的字符串
n$ 匹配以n为结尾的字符串
{n} 正好n次
{n,m} 最少n次,最多m次
{n,} 最少n次,最多不限
{,m} 最少不限,最多m次
匹配中文
[\u4e00-\u9fa5]
基本上正则表达式的内容就由以上部分组成了。
正则表达式字符串匹配方法
1、search()
字符串搜索,返回出现的位置
实例:判断浏览器的类型
1 <script> 2 var browser = window.navigator.userAgent; 3 4 if(browser.search(/firefox/i) != -1){ 5 alert("This is Firefox"); 6 } 7 else if(browser.search(/chrome/i) != -1){ 8 alert("This is Chrome"); 9 } 10 else if(browser.search(ie/i)){ 11 alert("This is IE"); 12 } 13 </script>
2、match()
获取匹配的项目,返回数组
实例:可以参照引例
3、replace( , )
替换所有的匹配,返回替换后的字符串
实例:敏感词过滤
1 <script> 2 var str = ‘What the fuck is ?‘ 3 str = str.replace(/fuck/g,‘***‘); 4 alert(str); 5 </script>
标签:
原文地址:http://www.cnblogs.com/JDDDD/p/5396648.html