【JS】——正则表达式

JS中刚刚接触到一个个人觉得非常新颖的东西——正则表达式。觉得 有必要总结一下。首先一张图,把正则表达式分为一下几个部分。

定义——干什么用的?

正则表达式(regular expression)简写为Regex:是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。ECMAScript 的 RegExp 类表示正则表达式,而 String 和 RegExp 都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。

个人理解:就是类似于查找功能,只不过是通过预先定义好的字符和符号组合,按照规定好的要求进行查找筛选。

创建正则表达式

方式一:new运算符

//第一个参数为字符串,第二个参数为可选模式修饰符(第二个参数是可以忽略的)

var box = new RegExp('box','g');

方式二:采用字面量方式

var box = /box/;
var box = /box/ig;  //直接使用两个反斜杠,在第二个反斜杠上加修饰符

模式修饰符的可选参数

上面中ig便于模式修饰符

方法

1、string ,包含四种方法

var box = /box/;
var box = /box/ig;  //直接使用两个反斜杠,在第二个反斜杠上加修饰符
var str ='This is a Box !,That is a Box too';

alert(str.match(box));   //返回pattern中的字串,或null

alert(str.search(box));  //返回查找到的位置,否则返回 -1;

alert(str.replace(box,'gox'));  //将box替换成了gox

alert(str.split(box));   //将空格拆分为数组

一类是RegExp,主要目的是为测试使用,包含两个方法test() 和exec();

方法一:test

<pre name="code" class="javascript">var box = /box/ig;
var str ='This is a Box !,That is a Box too';
alert(box.exec(str));

返回结果:true;

方法二:exec

var box = /box/ig;
var str ='This is a Box !,That is a Box too';
alert(box.exec(str));

获取控制

正则表示元字符是包含特殊含义的字符。有一些特殊功能,可以控制匹配模式的方式。反斜杠后的元字符将失去其字符特殊含义。类似于下图中的内容

这一部分涉及到两个概念贪婪和惰性(非贪婪)

贪婪:先匹配整个字符串,然后从右往左,不匹配就舍去一个。

惰性:从左往右匹配,第一个不匹配就再加第二个。

str = "aebb1234abbbaabbbaaabbb1234"; 
re = /.*bbb/g; 
re1 = /.*?bbb/g;
alert(str.match(re));    //贪婪——结果为abbb1234abbbaabbbaaabbb re = /.*?bbb/g; 
//解释:贪婪量词先匹配整个字串,若不匹配去掉一个尾字符,继续匹配;

alert(str.match(re1));    //惰性——结果为abbb,1234abbb,aabbb,aaabbb 
//解释:惰性量词从第一个字符开始递加去匹配,直到匹配成功,清空字串,从下一个字符继续匹配。

上述例子说明:贪婪模式下,不匹配的就删除,而惰性第一个不符合则去比较第二个字符一直到符合条件为止。

使用

关于正则表达式主要是使用在检查方面,一般我们经常使用就是检查邮政编码,文件压缩包名称,删除误操作造成的多余空格,以及简单的电子邮件验证。

主要作用

正则表达式主要用来验证客户端的输入数据。用户填写完表单单击按钮之后, 表单就会被发送到服务器,在服务器端通常会用 PHP、ASP.NET 等服务器脚本对其进行进一步处理 。因为客户端验证,可以节约大量的服务器端的系统资源,并且提供更好的用户体验。

优缺点

优点:只要熟练应用正则表达式,而且匹配的目标是纯文本,那么相比于写分析器来说,正则可以更快速的完成工作。还有在捕获字符串的能力,正则也可以很好的完成工作,比如截取url的域名或者其他的内容等等。

缺点:

1、正则表达式只适合匹配文本字面,不适合匹配文本意义:像匹配url,email这种纯文本的字符就很好,但比如匹配多少范围到多少范围的数字,如果你这个范围很复杂的话用正则就很麻烦。或者匹配html,这个是很多人经常遇到的,写一个复杂匹配html的正则很麻烦,不如使用针对特定意义的处理器来处理(比如写语法分析器,dom分析器等)

2.容易引起性能问题:像.*这种贪婪匹配符号很容易造成大量的回溯,性能有时候会有上百万倍的下降,编写好的正则表达式要对正则引擎执行方式有很清楚的理解才可以。

3.正则的替换功能较差:甚至没有基本的截取字符串或者把首字母改变大小写的功能,这对于url重写引擎有时候是致命的影响。

总结

关于正则表达式会出现在各种语言中,同时更快的提高我们的查找速度,也能相对的减轻服务端的压力,当然一个事务都具有两面性,还是需要适当使用,对于学习阶段还是需要多多使用,才能更好区别优缺点,也是为了能更好运用于实践当中。

时间: 2024-08-27 13:00:11

【JS】——正则表达式的相关文章

JS正则表达式完整教程(略长)

JS正则表达式完整教程(略长) 引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程,网上也有很多,相信你也看了一些. 与之不同的是,本文的目的是希望所有认真读完的童鞋们,都有实质性的提高. 本文内容共有七章,用JavaScript语言完整地讨论了正则表达式的方方面面. 如果觉得文章某块儿没有说明白清楚,欢迎留言,能力范围之内,老姚必做详细解答. 具体章节如下: 引言 第一章 正则表

js正则表达式的match test exec replace函数

js正则表达式的方法:一种正则在前,一种正则在后: 使用: 1.exec var res = /\-[a-z]/g .exec("font-size"); console.log(res); 得到的结果: 所以返回的是一个数组,第一个为匹配值,第二个是匹配的位置,第三个是输入的数 2.test var res = /\-[a-z]/g .test("font-size");console.log(res); 返回为一个布尔值 3.match var res =(&q

JS 正则表达式否定匹配(正向前瞻)

引言:JS 正则表达式是 JS 学习过程中的一大难点,繁杂的匹配模式足以让人头大,不过其复杂性和其学习难度也赋予了它强大的功能.文章从 JS 正则表达式的正向前瞻说起,实现否定匹配的案例.本文适合有一定 JS 正则表达式基础的同学,如果对正则表达式并不了解,还需先学习基础再来观摩这门否定大法. 一.标签过滤需求 不知道大家在写JS有没有遇到过这样的情况,当你要处理一串字符串时,需要写一个正则表达式来匹配当中不是 XXX 的文本内容.听起来好像略有些奇怪,匹配不是 XXX 的内容,不是 XXX 我

JS正则表达式大全(整理详细且实用)

JS正则表达式大全(整理详细且实用).需要的朋友可以过来参考下,希望对大家有所帮助!! 正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*".

精通JS正则表达式(转)

精通JS正则表达式,讲的比较详细,学习正则表达式的朋友可以参考下. 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 •替换文本.可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字 •根据模式匹配从字符串中提取一个子字符串.可以用来在文本或输入字段中查找特定文字 正则表达式语法 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符

js 正则表达式 查找

<script>var str='<p><img style="width: 140px; height: 105px;" src="/ckfinder/userfiles/images/qi_cym.jpg" data-cke-saved-src="/ckfinder/userfiles/images/qi_cym.jpg"></p><p><br></p>';

js正则表达式:验证邮箱格式、密码复杂度、手机号码、QQ号码

直接上代码 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

Python之路-(js正则表达式、前端页面的模板套用、Django基础)

js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m 表示多行匹配 登录注册验证: test: 判断字符串是否符合规定的规则 rep = /\d+/;   (定义规则) rep.test('')   (引号里面必须包含字母和数字才返回true,否则为false) rep = /^\d+$/; (只有是纯数字时候才返回true,否则是false) exe

js正则表达式进行格式校验

今天做了个js正则表达式的练习,利用正则表达式进行注册信息格式验证,注册信息界面如下: 格式要求: 1.学号项不能为空,必须为纯数字,不能与数据库中的重复,正则表达式/^\d+$/g: 2.姓名项不能为空: 3.密码不能为空且无空格判断空格text.split(" ").length != 1,安全等级分为3个等级,若全为字母或者数字为1级,正则表达式(text.search(/^[a-zA-Z]+$/g) != -1) || (text.search(/^[0-9]+$/g) !=

js 正则表达式 转至(七郎&#39;s Blog)

//匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线 var re =new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,19}$"); if(re.test(aaaa)){alert("格式正确");}else{alert("格式错误");} var s_currency = /^([1-9][\d]{0,7}|0)(\.[\d]{1,2})?$/; if(!s_currency.test($("#