一直对正则很纠结也很畏惧,以前感觉花时间理解一个个奇奇怪怪的符号,还不如直接百度谷歌之。

但知其然不知其所以然也是种痛苦,所以花了两天稍微学了一下,虽然没学很深入彻底,但也比之前进步不少,特此笔记。

js正则

g:表示全局,匹配全部
i:表示不区分大小写
m:表示匹配多行(匹配换行两端的潜在匹配)

RegExp实例属性:
  global:是否设置了g
  ignoreCase:是否设置了i 
  lastIndex:表示下一次exec开始搜索下个匹配项的字符位置 
  multiline:表示是否设置了m 
  source:正则表达式的字符串表示

RegExp实例方法: 
  exec(str);用于捕获组(用小括号指定一个子表达式),返回包含第一个匹配项信息的数组。 
  test(str);用于验证是否匹配,返回true或false。

RegExp构造函数属性: 
  input[$_]:最近一次要匹配的字符串,opera未实现 
  lastMatch[$&]:最近一次匹配项,opear未实现 
  lastParen[$+]:最近一次匹配的捕获组,opera未实现 
  leftContext[$’]:input字符串中lastMatch之前的文本 
  multiline[$*]:表示是否所有表达式都是用多行模式,ie和Opera不支持 
  rightContext[$']:input字符串中lastMatch之后的文本

\ :转义字符 
^ : 匹配字符串开头,如/^a/ 匹配 an A 而不匹配 An a 
$ : 匹配字符串结尾,如/a$/ 匹配 An a 而不匹配 an A 
* : 匹配匹配前面元字符0或多次 /ba*/将匹配b,ba,baa,baaa * = {0,}
+ : 匹配前面元字符1次或多次 /ba+/ 匹配ba + = {1,}
? : 匹配前面元字符0次或1次,/ba?/将匹配b,ba ? = {0,1}
(x) 匹配x保存x在名为$1...$9的变量中 
.匹配除行结束符意外的任何字符 
x|y 匹配x或y 
{n} 精确匹配n次 
{n,} 匹配n次以上 
{n,m} 匹配n-m次 
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) 
[^xyz] 不匹配这个集合中的任何一个字符 
[\b] 匹配一个退格符 
\b 匹配一个单词的边界 
\B 匹配一个单词的非边界 
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M 
\d 匹配一个字数字符,/\d/ = /[0-9]/ 
\D 匹配一个非字数字符,/\D/ = /[^0-9]/ 
\n 匹配一个换行符 
\r 匹配一个回车符 
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等 
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/ 
\t 匹配一个制表符,tab建 
\v 匹配一个重直制表符 
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9] 
\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
\1 对第一个捕获组的文本进行引用,用于再次匹配 如:(...)...\1 
(?=) 向前正匹配 (?!)向前负匹配

以上就是大部分常用的令人生畏的正则语法,用了之后其实常用的也是有规律可寻,难以概况但熟能生巧。

下面就是从书中摘取的实例:

//正则表达式:
function testUrl(){
var pt = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; //pt解析:
// ^ 匹配字符串开头
// (?:(A-Za-z+):)? ?:表示非捕获组 (A-Za-z+):表示匹配字母后加:,且是第一个捕获组 ?表示分组可选
// (\/{0,3}) ()表示第二个捕获组 \/转义,匹配/ {0,3}匹配前面字符0-3次
// ([0-9.\-A-Za-z]+) ()第三个捕获组 []匹配方括号内的字符 0-9 . - A-Za-z 匹配这四种字符 +多个
// (?::(\d+))? ?:非捕获组 :匹配冒号开始 (\d+)第四个捕获组,匹配多个数字 ?可选
// (?:\/([^?#]*))? \/匹配/ ([^?#]*)第五个捕获组,匹配除?#外的字符 *该字符类将匹配n次
// (?:\?([^#]*))? \?匹配? ([^#]*)第六个捕获组,匹配除#外的字符 *匹配多次
// (?:#(.*))? #匹配# (.*)第七个捕获组 .匹配除结束符外的所有字符 *匹配多次
// $ 字符串结束 var url = 'http://www.ora.com:80/goodparts/abcde?q#fragment';
var res = pt.exec(url);
var names = ['url','scheme','slash','host','port','path','query','hash'];
var blanks = ' ';
for(var i=0;i<names.length;i++){
console.log(names[i]+':'+blanks.substring(names[i].length),res[i]);
}
}
 
function testNumber(){
var pt = /^-?\d+(?:.\d*)?(?:e[+\-]?\d+)?$/i;
//pt解析
// ^ $ 分别匹配开头和结尾
// -? -匹配0次或一次,也就是可选
// \d+ 匹配至少一个数字
// (?:.\d*)? ?:非捕获组 .匹配小数点 \d* 小数点后匹配任意个数字 ?可选
// (?:e[+\-]?\d+)? ?:非捕获组 e匹配e和E [+\-] 匹配加号或者减号 ?可选 \d+匹配一个以上数字 ?可选 console.log(pt.test(-1));
console.log(pt.test(100.1993));
console.log(pt.test("sss"));
console.log(pt.test(123.45E-67));
}

正则中用法比较重要的个人感觉就是捕获组,和非捕获组,捕获组在replace方法中也会很有用,比如创建模板模式,通过一些匹配替换内容。

js正则学习的更多相关文章

  1. js 正则学习小记之匹配字符串

    原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ...

  2. js 正则学习小记之左最长规则

    原文:js 正则学习小记之左最长规则 昨天我在判断正则引擎用到的方法是用 /nfa|nfa not/ 去匹配 "nfa not",得到的结果是 'nfa'.其实我们的本意是想得到整 ...

  3. js 正则学习小记之NFA引擎

    原文:js 正则学习小记之NFA引擎 之前一直认为自己正则还不错,在看 次碳酸钴,Barret Lee 等大神都把正则玩的出神入化后发现我只是个战五渣.  求抱大腿,求大神调教. 之前大致有个印象,正 ...

  4. js 正则学习小记之匹配字符串优化篇

    原文:js 正则学习小记之匹配字符串优化篇 昨天在<js 正则学习小记之匹配字符串>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯 ...

  5. js 正则学习小记之匹配字符串字面量优化篇

    昨天在<js 正则学习小记之匹配字符串字面量>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯后用 [^"] 才能匹配成功 ...

  6. js 正则学习小记之匹配字符串字面量

    今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高亮练手,所以用js代码当作例子) va ...

  7. js正则学习分享

    http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222.html http://www.cnblogs.com/tylerdonet/ ...

  8. js正则学习及一些正则集合

    正则中文版详细说明请看中文版w3cschool-----http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp微软正则表达式语言-快速参考:http ...

  9. js正则学习小计

    //元字符 {} () ^ $ . ? + //预定义字符 \d \D \w \W \s \S //量词 {n,m} {n} {n,} + ? * //贪婪和惰性 //反向引用 //分组 //候选 / ...

随机推荐

  1. (25)线程---local数据隔离

    线程之间本身是数据共享的,当多个线程同时修改一份数据的时候,数据就可能不 准确,特别是线程量特别大的时候,为了保证数据准确性: (1) 通过线程锁Lock (2)通过local数据隔离 from th ...

  2. 《HTTP 权威指南》笔记:第十三章 摘要认证体制

    前言 基本认证存在缺陷,摘要认证为了解决基本认知的一些缺陷,进行了进一步的完善,更加安全. 流程 摘要认证的特点是:永远不会以明文方式在网络上发送密码原理:通过发送一个「指纹」或者「密码的摘要」来验证 ...

  3. ado.net介绍

    System.Data:DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint System.Data.Common(各种数据访问类的 ...

  4. R中的高效批量处理函数(lapply sapply apply tapply mapply)(转)

    转自:http://blog.csdn.net/wa2003/article/details/45887055 R语言提供了批量处理函数,可以循环遍历某个集合内的所有或部分元素,以简化操作. 这些函数 ...

  5. android -------- 蓝牙Bluetooth

    什么是蓝牙? 也可以说是蓝牙技术.所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的.利用“蓝牙”技术,能够有效地简化掌上电脑.笔记本电脑和移动电话手机等移动通 ...

  6. Vue之vue自动化工具快速搭建单页项目目录

    1 生成项目目录 使用vue自动化工具可以快速搭建单页应用项目目录. 该工具为现代化的前端开发工作流提供了开箱即用的构建配置.只需几分钟即可创建并启动一个带热重载.保存时静态检查以及可用于生产环境的构 ...

  7. LitePal 数据库使用方法(最新2.0LitePal数据库适用)

    转发郭神的blog,讲的非常详细,是基于1.6版本,但现在使用的是2.0,有点差别https://blog.csdn.net/guolin_blog/article/details/384612391 ...

  8. python记录day24 模块的语法

    使用模块的两种方式: import xxx from xxx import xxx 使用模块的优点: 1.实现代码的重用 2.可以把代码分类 一.import 导入模块的时候系统会做三件事 1.先去s ...

  9. Matlab-2:二分法工具箱

    function g=dichotomy(f,tol) %this routine uses bisection to find a zero of user-supplied %continuous ...

  10. IE的“浏览器模式”和“文档模式的区别”

    1.浏览器模式 用于切换IE针对该网页的默认文档模式.对不同版本浏览器的条件备注解析.发送给网站服务器的用户代理(User_Agent)字符串的值.网站可以根据浏览器返回的不同用户代理字符串判断浏览器 ...