在js中,正则表达式是由一个RegExp对象表示的,RegExp 是正则表达式的缩写。RegExp简单的模式可以是一个单独的字符。更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。可以使用一个RegExp()构造函数来创建RegExp对象,也可以使用直接量语法。
1、RegExp简介。
RegExp即正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE/re/reg),就是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式,搜索模式可用于文本搜索和文本替换。
正则表达式是由一个字符序列形成的搜索模式,当你在文本中搜索数据是,你可以用搜索模式来描述你要查询的内容,也就是说正则表达式是描述字符模式的对象,可用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。
所谓正则表达式,直接可理解为规则或者模式表达式,就是表达了某一种计算机可以理解的规则,而一般人很难读懂的文字表达方式,可用于所有文本搜索和文本替换的操作,简单说就是处理字符串。
2、字符串方法。
(1)、charAt() 获取某个字符,返回字符串某一位的字符。
(2)、split() 分割字符串,获得数组。
(3)、search() 查找某个字符首次出现的位置,配合正则使用更好,返回值为数值,没找到返回-1。
(4)、match() 查找字符串中指定字符并返回该字符,如果不使用正则,则只返回首次出现的指定字符,不会再向后匹配,如果使用正则并进行全局匹配,则以数组形式返回字符串中所有指定的字符,没找到则返回null。
(5)、replace() 替换字符,返回一个新字符串,配合正则使用更好,可以替换所有匹配。
<script> var str='abcdefgca'; //返回字符串中某一位的字符。 alert(str.charAt()); //返回:d //查找字符串首次出现的位置。 alert(str.search('z')); //返回:- //查找指定的字符。 //只返回第一次出现的c,不再向后匹配。 alert(str.match('c')); //返回:c //将'a'替换为'i'。 //只替换了第一个位置的a,不再向后匹配。 alert(str.replace('a', 'i')); //返回:ibcdefgca //分割字符串。 var str='--aaa--cd'; var arr=str.split('-'); //返回:,,aaa,,cd alert(arr); </script>
实例:使用普通方法找出字符串中所有数字
实现思路:要找出字符串中的数字,其实也不难,使用判断先将字符串中的数字提取出来,那么字符串中肯定不止一个数字,所以就需要一个空字符串来存储提取出来的数字字符,然后再将这些数字字符添加到数组中,最后返回,这样就完成了。来看看程序是怎么实现的:
<script> var str=' abc d aa c zz -=-=s-'; var arr=[]; var num=''; //首先循环遍历字符串 for(var i=;i<str.length;i++){ //再判断当前字符大于等于并且小于等于,则为数字 if(str.charAt(i)>='' && str.charAt(i)<=''){ //那么就将当前的字符存储在空字符串中 num += str.charAt(i); } else{ //如果字符串中有值。 if(num){ //将值添加到数组中。 arr.push(num); //再清空字符串,避免重复添加。 num=''; } } } //最后在整个字符串结束之后有可能还会有数字,再做一次判断。 if(num){ //如果还有值就添加到数组中。 arr.push(num); //再清空字符串。 num=''; } //返回:OK,现在返回就完成了。 alert(arr); //返回:,,,,,,, </script>
虽然可以使用普通方法完成,结构清晰,但是代码相对较长,如果使用正则,那么一个表达式就完成了这么多工作,非常方便,下面就来看看怎么使用正则。
3、使用正则。
正则表达式语法:var re = new RegExp('模式', '修饰符');
模式就是表达式的模式,而修饰符是用于指定全局匹配、不区分大小写等,完整形态就是正则表达式。
看到正则语法长这模样,不就是JS中典型的新创建对象的语法么,对了,就是新创建一个正则对象。我们都知道,要尽量避免使用new关键词,使用new无疑就是新创建了一个对象,那么同时就预示着其占据了一定的内存空间,如果处理不当,积累多了会造成内存溢出,这样相当耗费资源,不利于代码优化的实现。同时这样的写法,体现不出正则的强大,他应该是很简a洁的才对,因此在实际使用的时候都不采用这种JS风格的正则语法,都使用的是另一种风格,如下:
语法:var re = /模式/修饰符;
这种风格就相对简洁了,属于一般人看不懂的表达方式。
(1)、修饰符。
修饰符用于执行全局匹配和区分大小写。
忽略大小写:i (ignore的简写,中文翻译为:忽视)
全局匹配:g (global的简写,中文翻译为:全部的/全局的)
实例:全局搜索指定字符