正则表达式易于使用而又让人费解,乍一看上去,就像是一行行的乱码,但是它的功能确实又不容小觑。今天整理正则时,纠正了自己的一个误解。

先缕一缕:

正则表达式的两种声明方式:

    字面量、构造器

    (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正则表达式里的控制符的更多相关文章

  1. js正则表达式replace里有变量的解决方法用到RegExp类

    一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用js操作字符串的时候,我最多使用的是replace.split.substring.indexOf等函数,这些函数有时候需要多次叠加使用,但 ...

  2. js正则表达式【原】

    js正则表达式 http://www.w3school.com.cn/js/js_obj_regexp.asp js常用正则表达式 我的自测样例 <HTML> <HEAD> & ...

  3. JS正则表达式大全

    转自:http://wenku.baidu.com/link?url=3y930kC7F6D3wQdMjQ3fVDmiA9Wfebs_QK0UB3N3mFaEoKg4ytZORPopxufeYA6si ...

  4. js正则表达式实例(汇总)

    来源:如何用JAVASCRIPT 正则表达式取出字符串最后一组数字,谢谢  如  30CAC0040 取出40  3SFASDF92 取出92  正则如下://d+$/g   统一空格个数  来源:正 ...

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

    JS正则表达式大全(整理详细且实用).需要的朋友可以过来参考下,希望对大家有所帮助!! 正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释, ...

  6. JS正则表达式完整教程

    JS正则表达式完整教程(略长) 引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程, ...

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

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  8. 【正则】精通JS正则表达式,没消化 信息量太大,好文

    http://www.jb51.net/article/25313.htm 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用 ...

  9. (转)精通 JS正则表达式

    精通 JS正则表达式 (精通?标题党 ) 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证  ...

随机推荐

  1. 让android项目支持boost 支持c++11

    在Application.mk 里增加-D__GLIBC__  让项目支持boost 增加 -std=c++11 让项目支持c++11 (3.x的cocos本身已经支持了的) 看起来这样: APP_S ...

  2. VHDL:信号、端口以及和Verilog的区别

    1.信号 信号是描述硬件系统的基本数据对象,它的性质类似于连接线.信号可以作为设计实 体中并行语句模块间的信息交流通道.      信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值(这决定于 ...

  3. POJ-3261 Milk Patterns(后缀数组)

    题目大意:找出至少出现K次的子串的最长长度. 题目分析:二分枚举长度x,判断有没有最长公共前缀不小于x的并且连续出现了至少k次的有序子串区间. 代码如下: # include<iostream& ...

  4. C++实现不能被继承的类——终结类 分类: C/C++ 2015-04-06 14:48 64人阅读 评论(0) 收藏

    1.       问题 C++如何实现不能被继承的类,即终结类.Java中有final关键字修饰,C#中有sealed关键字修饰,而C++目前还没有类似的关键字来修饰类实现终结类,需编程人员手动实现. ...

  5. 自定义webkit搜索框样式

    好吧,这是个有点儿蛋疼的文章,每个浏览器都可以有自己的行为和表现,只是webkit在apple的带领下,在UI上走的更远了一点儿,但是却给我们带来了点儿困扰,因为很多情况下,我们希望搜索框在所有的浏览 ...

  6. PyCharm/IntelliJ IDEA Golang开发环境搭建(最方便快捷的GO语言开发环境)

    IntelliJ太牛了.为了配置Go语言开发环境,折腾了半天,下IDE(Sublime Text,IntelliJ Idea),然后装Go插件.装Go插件还要下载插件项目源码,编译等等,Sublime ...

  7. 关于Java的软引用及弱引用

    概念介绍   1   Reference      描述一个对象的引用.其内部维持一个queue引用,用于跟踪对象的回收情况,当对象被回收时将当前reference引用入队   2   SoftRef ...

  8. 10 Common Problems Causing Group Policy To Not Apply

    10 Common Problems Causing Group Policy To Not Apply Group Policy is a solid tool and is very stable ...

  9. 发送短信(string转换为JSON)

    using Newtonsoft.Json;using System;using System.Collections.Generic;using System.Linq;using System.T ...

  10. linux命令行与shell脚本编程大全---更多bash shell命令

    进程状态:0代表正在运行:S代表在休眠:R代表可运行,正等待运行:Z代表僵化,进程已经结束但父进程已不存在:T代表停止. 查看有那些进程运行:ps  -ef 基本的linux文件系统: 1.ext文件 ...