JavaScript学习小结(7)之JS RegExp

前端之家收集整理的这篇文章主要介绍了JavaScript学习小结(7)之JS RegExp前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在js中,正则表达式是由一个RegExp对象表示的,RegExp 是正则表达式的缩写。RegExp简单的模式可以是一个单独的字符。更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。可以使用一个RegExp()构造函数来创建RegExp对象,也可以使用直接量语法。

  RegExp即正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE/re/reg),就是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式,搜索模式可用于文本搜索和文本替换。

  正则表达式是由一个字符序列形成的搜索模式,当你在文本中搜索数据是,你可以用搜索模式来描述你要查询内容,也就是说正则表达式是描述字符模式的对象,可用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。

  所谓正则表达式,直接可理解为规则或者模式表达式,就是表达了某一种计算机可以理解的规则,而一般人很难读懂的文字表达方式,可用于所有文本搜索和文本替换的操作,简单说就是处理字符串。

方法。

  (1)、charAt()  获取某个字符,返回字符串某一位的字符。

  (2)、split()  分割字符串,获得数组。

  (3)、search()  查找某个字符首次出现的位置,配合正则使用更好,返回值为数值,没找到返回-1。

  (4)、match()  查找字符串中指定字符并返回该字符,如果不使用正则,则只返回首次出现的指定字符,不会再向后匹配,如果使用正则并进行全局匹配,则以数组形式返回字符串中所有指定的字符,没找到则返回null。

  (5)、replace()  替换字符,返回一个新字符串,配合正则使用更好,可以替换所有匹配。

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);

实例:使用普通方法找出字符串中所有数字

实现思路:要找出字符串中的数字,其实也不难,使用判断先将字符串中的数字提取出来,那么字符串中肯定不止一个数字,所以就需要一个空字符串来存储提取出来的数字字符,然后再将这些数字字符添加到数组中,最后返回,这样就完成了。来看看程序是怎么实现的:

var str=' abc d aa c zz -=-=s-'; var arr=[]; var num=''; //首先循环遍历字符串 for(var i=;i='' && str.charAt(i)<=''){ //那么就将当前的字符存储在空字符串中 num += str.charAt(i); } else{ //如果字符串中有值。 if(num){ //将值添加到数组中。 arr.push(num); //再清空字符串,避免重复添加。 num=''; } } } //最后在整个字符串结束之后有可能还会有数字,再做一次判断。 if(num){ //如果还有值就添加到数组中。 arr.push(num); //再清空字符串。 num=''; } //返回:OK,现在返回就完成了。 alert(arr); //返回:,

虽然可以使用普通方法完成,结构清晰,但是代码相对较长,如果使用正则,那么一个表达式就完成了这么多工作,非常方便,下面就来看看怎么使用正则。

  正则表达式语法:var re = new RegExp('模式','修饰符');

  模式就是表达式的模式,而修饰符是用于指定全局匹配、不区分大小写等,完整形态就是正则表达式。

  看到正则语法长这模样,不就是JS中典型的新创建对象的语法么,对了,就是新创建一个正则对象。我们都知道,要尽量避免使用new关键词,使用new无疑就是新创建了一个对象,那么同时就预示着其占据了一定的内存空间,如果处理不当,积累多了会造成内存溢出,这样相当耗费资源,不利于代码优化的实现。同时这样的写法,体现不出正则的强大,他应该是很简a洁的才对,因此在实际使用的时候都不采用这种JS风格的正则语法,都使用的是另一种风格,如下:

  语法:var re = /模式/修饰符;

  这种风格就相对简洁了,属于一般人看不懂的表达方式。

  (1)、修饰符。

  修饰符用于执行全局匹配和区分大小写。

  忽略大小写:i (ignore的简写,中文翻译为:忽视)

  全局匹配:g (global的简写,中文翻译为:全部的/全局的)

  实例:全局搜索指定字符

var str='AbCdEFgiX'; //JS风格: //这个正则表达式什么也不代表,只代表abc本身。 var reg=new RegExp('abc','i'); alert(str.match(reg)); //返回:AbC //常用风格: var re=/efg/i; alert(str.match(re)); //返回:EFg

  (1)、方括号。

  方括号用于查找某个范围内的字符。   ①、任意字符   表达式:[abc]   查找方括号中的任意字符。   []在这里为或的意思,即随便出现哪个都行。

var str='apc xpc ppc bpc spc opc'; //[apx]pc,随便出现哪个都行,即:apc ppc xpc var re=/[apx]pc/g; alert(str.match(re)); //返回前个pc。

  ②、范围查找。

  表达式:[0-9] [a-z] [A-z] [A-Z]

  [0-9]  查找任意 0 - 9 的数字。

  [a-z]  查找任意 a - z 的字符。

  [A-z]  查找任意 大写A - 小写z 的字符。

  [A-Z]  查找任意 大写A - 大写Z的字符。

  ③、排除查找。

  表达式:[^abc] [^a-z] [^0-9]

  [^abc]  查找任意不在方括号中的字符。

  [^a-z]  查找任意除了字母以外的字符,包括数字符号中文外文。

  [^0-9]  查找任意除了数字以外的字符,包括字母符号中文外文。

var str='ot out o.t o t o`t ot ot'; //o和t中间除了数字,什么都可以 var re=/o[^-]t/g; alert(str.match(re)); //返回:out,o.t,o t,o`t

  ④、选择查找。

  表达式:(a|b|c)

  查找任何指定的选项,a或b或c。

  ⑤、匹配还可以使用组合模式,比如:[a-z0-9A-Z] [^a-z0-9]

  [a-z0-9A-Z]  任意大小写字母和数字。

  [^a-z0-9]  除了字母和数字以外,什么都可以。

  (2)、元字符。

  元字符是拥有特殊含义的字符,也可以叫做转义字符。

  下面是一些常用的元字符:

包括换行和行结束符。包括英文数字下划线,相当于[a-z0-9]包括空格符、回车符、制表符、换行符和换页符,不可显示不可打印的字符。

  所谓量词,就是数量词,即个数,用在正则中,表示出现的次数

  下面是一些常用的量词:

搜索,包括其后紧跟的零个或1个'0'。
搜索。搜索。搜索。搜索。

下面是一些常用的匹配模式:

搜索以'a'开头的字符搜索以'z'结尾的字符搜索'a'后紧跟'b'的字符搜索'c'后没有紧跟'd'的字符

  (1)、search()配合正则

  实例:找出字符串中第一次出现数字的位置

var str='asdf zxcvbnm'; //元字符\d,表示转义为数字 var re=/\d/; alert(str.search(re)); //返回: 第一个数字为出现在第位

  (2)、match()配合正则

  其实没有什么东西是非正则不可的,只是正则可以让做东西更方便。下面就完成本章遗留的历史问题,怎么使用正则,能一句代码就完成普通方法需要很多行代码才能完成的东西。

  在实例之前,先看看match()与正则的配合。

var str='asdf zxcvm'; //找出字符串中的数字可以使用元字符\d var re=/\d/; //没告诉系统要找多少数字,系统在找到数字后就返回 alert(str.match(re)); //返回: //因此需要全局匹配,使用修饰符g var re=/\d/g; //没告诉系统要找几位,系统会将所有找到的数字返回 alert(str.match(re)); //返回:,//所以可以使用两个元字符,告诉系统要找的数字是位 var re=/\d\d/g; //显然这样是不可取的,因为数字的位数并不固定,可能是位,有可能还是多位 alert(str.match(re)); //返回:,//所以需要用到量词+,+代表若干,也就是多少都可以。 var re=/\d+/g; //现在返回正确。 alert(str.match(re)); //返回:,

  实例:使用正则找出字符串中所有数字

var str=' abc d aa c zz -=-=s-'; //alert(str.match(/\d+/g)); //元字符\d也可以使用[-]代替,到随便哪个都行。 alert(str.match(/[-]+/g)); //返回:,

  正则是强大的字符串匹配工具,就这样简单的使用一句代码就完成了。

  (3)、replace()配合正则

var str='abc zaaz deaxcaa'; //将字符串中的a替换为数字 alert(str.replace('a',)); //仅仅只将第一个a替换为 //配合正则使用匹配所有a再替换 var re=/a/g; alert(str.replace(re,'')); //返回所有的a都为

  实例:简单的敏感词过滤

  所谓的敏感词,就是法律不允许的词语,一切非法词都可以叫做敏感词,这包括的范围就太广了,比如危害国家安全,反对宪法确立的基本原则,散步谣言,扰乱民心,扰乱社会秩序,破坏社会稳定,色情、暴力、赌博、虚假、侵害、骚扰、粗俗、猥亵或其他道德上令人反感的词,以及含有法律规定或禁止的其他内容的词语。在平时最常见也是大多数人都会用的词莫属道德上令人反感的词了,说斯文一点就是吵架时用于攻击别人的词语。这里就列举几个热门的网络词语作为例子。

<Meta charset="UTF-"> JavaScript实例