【原】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正则表达式 (精通?标题党 ) 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 ...
随机推荐
- javascript 封装(给自己看)
HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- Codeforces 733F Drivers Dissatisfaction
题意:有n个点,m条边,每条边有不满意度w[i],以及减小一个不满意度代价c[i],问给你s元用来减少代价,找到一个总不满意度最小的生成树,保证有解.(减少后的不满意度可以为负数)思路:显然所有的钱都 ...
- 职责链模式(chain of responsibility Pattern)
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. •Handler: 抽象处理者:定义出一个 ...
- numpy.distutils.system_info.NotFoundError: no lapack/blas resources found
python35用pip安装scipy的时候报错 numpy.distutils.system_info.NotFoundError: no lapack/blas resources found 原 ...
- javascript中的事件委托
这几天看到一个面试题,大概就是,让你给1000个li都添加一个click事件,应该怎么添加?大多数人第一开始的感觉可能就是,每个li上边都添加一个呗,那要是这样的话,估计面试的时候就会GG了,这里就是 ...
- 使用pt-stalk分析MySQL的性能波动 (转)
简介 在MySQL服务器出现短暂(5~30秒)的性能波动的时候,一般的性能监控工具都很难抓住故障现场,也就很难收集对应较细粒度的诊断信息.另外,如果这种波动出现的频率很低,例如几天才一次,我们也很难人 ...
- SVD分解的理解[转载]
http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...
- AttributeTargets 枚举
AttributeUsage AttributeTargets 在C#的类中,有的类加上了[AttributeUsage(AttributeTargets.Property)]这个是起什么作用的呢?A ...
- Catalan数(数论)
Catalan数 [参考网址]http://www.cnblogs.com/gongxijun/p/3232682.html 记得当时我们队写过一个,差点超时,现在找到了公式,感觉还是挺简单的. 还要 ...
- 解决jsp下载文件,迅雷下载路径不显示文件名称的问题
如果浏览器安装了迅雷的插件,在jsp页面调用java后台实现文件下载功能时,会自动弹出迅雷下载,迅雷的下载路径会显示.do或者.xhtml之类的,为了解决这个问题,jsp页面修改如下: 写一个< ...