【原】JS正则表达式里的控制符
正则表达式易于使用而又让人费解,乍一看上去,就像是一行行的乱码,但是它的功能确实又不容小觑。今天整理正则时,纠正了自己的一个误解。
先缕一缕:
正则表达式的两种声明方式:
字面量、构造器
(RegExp构造器适用于必须在运行时动态生成正则表达式的情形,并且还涉及到双重转义的问题,因此优先选择字面量方法声明。)
RegExp实例的两个方法:
exec();//返回一个数组(一个个的捕获组)
test();//返回一个布尔值
exec()涉及到了正则表达式的分组,他有四种分组:捕获型、非捕获型、向前正向匹配、向前负向匹配。
捕获型:括号里的内容被匹配后,会保存在RegExp中,如:
var str = "we are family~~";
var pattern = /(are)/;
pattern.test(str);
alert(RegExp.$1); //输出:are
非捕获型:括号里的内容被匹配后,不会保存在RegExp中,如:
var str = "we are family~~";
var pattern = /(?:are)/;
pattern.test(str);
alert(RegExp.$1); //输出:(空)
问题出现了:我习惯性地在用字面量去声明正则表达式时加上开始和结束控制符“/^&/”,结果并没有输出我想要的结果:
var str = "we are family~~";
var pattern = /^(are)&/;
alert(pattern.test(str)); //输出:false
才发现这个/^$/并非我想想中的那个意思。
我们用^、$去框定(这是《JS语言精粹》里的用词,感觉很贴切)一个正则表达式,它指引正则表达式对文本的所有字符进行匹配,并且匹配那些以特定字符开始和结束的字符串。
“^”:表示一个字符串的开始,将匹配一个以特定字符开头的字符串,如果上例中str的值为“are we family~~",那么alert(pattern.test(str))就会输出true;
“$”:表示一个字符串的结束,将匹配一个以特定字符结束的字符串,如果上例中str的值为“we family are",那么alert(pattern.test(str))就会输出true;
其次,string的实例也有一个match方法与正则的exec方法很类似,他们的本质是相同的,书写上刚好是顺序颠倒了一下:
var str = "we are family~~";
var pattern = /are/;
alert(pattern.exec(str)); //输出数组:are,are
alert(str.match(pattern)); //输出一个数组:are,are,该数组与exec方法调用后返回的数组一样
最后想说,正则的使用一定要细心,这么琐碎的东西拼凑起来,去实现各种功能强大的验证,真是可以将我们开发人员的匠心发挥到极致了,并且不严谨的正则表达式是一个常见的安全漏发源地。
【原】JS正则表达式里的控制符的更多相关文章
- js正则表达式replace里有变量的解决方法用到RegExp类
一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用js操作字符串的时候,我最多使用的是replace.split.substring.indexOf等函数,这些函数有时候需要多次叠加使用,但 ...
- js正则表达式【原】
js正则表达式 http://www.w3school.com.cn/js/js_obj_regexp.asp js常用正则表达式 我的自测样例 <HTML> <HEAD> & ...
- JS正则表达式大全
转自:http://wenku.baidu.com/link?url=3y930kC7F6D3wQdMjQ3fVDmiA9Wfebs_QK0UB3N3mFaEoKg4ytZORPopxufeYA6si ...
- js正则表达式实例(汇总)
来源:如何用JAVASCRIPT 正则表达式取出字符串最后一组数字,谢谢 如 30CAC0040 取出40 3SFASDF92 取出92 正则如下://d+$/g 统一空格个数 来源:正 ...
- JS正则表达式大全(整理详细且实用)
JS正则表达式大全(整理详细且实用).需要的朋友可以过来参考下,希望对大家有所帮助!! 正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释, ...
- JS正则表达式完整教程
JS正则表达式完整教程(略长) 引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程, ...
- Python之路-(js正则表达式、前端页面的模板套用、Django基础)
js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...
- 【正则】精通JS正则表达式,没消化 信息量太大,好文
http://www.jb51.net/article/25313.htm 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用 ...
- (转)精通 JS正则表达式
精通 JS正则表达式 (精通?标题党 ) 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 ...
随机推荐
- Java 设计一个贷款计算器 简易
import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.border.*; publi ...
- PAT (Basic Level) Practise:1038. 统计同成绩学生
[题目链接] 本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最 ...
- Android——数据存储(课堂代码整理:SharedPreferences存储和手机内部文件存储)
layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...
- Jenkins Job 自杀 groovy
下面的groovy可以加在post groovy script里面在job跑完的时候自杀(把本Job删掉) suicide_url="http://[USER]:[PASSWORD]@[JE ...
- OJ上 G++ 与 C++ 的区别
1.输出double类型时,如果采用G++提交,scanf采用%lf,prinf采用%f,否则会报错 2.使用GCC/G++的提醒: 对于64位整数, long long int 和 __int64 ...
- SQL总结(三)其他查询
SQL总结(三)其他查询 其他常用的SQL,在这里集合. 1.SELECT INTO 从一个表中选取数据,然后把数据插入另一个表中.常用于创建表的备份或者用于对记录进行存档. 语法: SELECT c ...
- JS--事件模块
一.JS event 的浏览器兼容 说到JS事件,不能不先讲一下事件流 1 事件流的定义:事件流是指从页面中接收事件的顺序 如下图所示,假设有四个圆层叠在一起,如果我们单击图中最里面的那个圆,那么我们 ...
- [Eclipse] - 集成Tomcat热加载插件
使用Eclipse + Tomcat,要使用热加载,总是会重启tomcat webapp. 可以使用这个插件:jrebel 如果是Tomcat 7.0+版本,需要使用jrebel5.5.1+的版本,不 ...
- H5 App开发用WeX5垃圾 试用一周,我果断放弃了wex5
上个月,和朋友一起参加wex5的分享会,因为对cordova有些了解,始终不相信wex5的广告.五一假期,小试一下,果然不出我所料,有不少坑. 想下载IDE,竟然有1.7G,虽然现在网速快但是文件太大 ...
- 初学RabbitMQ
一.RabbitMQ中的一些概念 (1)Connection(连接) 与RabbitMQ建立连接,由ConnectionFactory创建每个Connection至于一个物理server进行连接,此链 ...