关于反向引用

复制代码 代码如下:

// 测试函数
function matchReg(reg, str) {
var result = str.match(reg);
if(result) {
console.dir(result);
} else {
console.log('match failed');
}
}

var reg = /([A-Za-z]{0,6})\1/;
var str = 'AndrewAndrew';
// 测试通过
matchReg(reg, str);

//通过(?:pattern)的方式,不记录子表达式匹配的内容(本例中为Andrew)
//所以\1对子表达式匹配内容的引用失败了
//注意:这里强调的是子表达式所匹配的内容,而不是子表达式本身
reg = /(?:[a-zA-Z]{0,6})\1/;
// 测试不通过
matchReg(reg, str);

关于子表达式的定义
var parse_number = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
这是一个解析数字的正则表达式,其中的子表达式有(?:\.\d*)和(?:e[+\-]?\d+)
\.和\-分别是对.和-的转义表达
顺便复习下.表示除换行符以外的其他字符
-一般用于[a-zA-Z0-9]表示匹配范围
如果其中没?:例如(\.\d*)那么按照先后顺序,反向引用的关系如下
\1-->(\.\d*)
\2-->(e[+\-]?\d+)
如果有更多的话,就以此类推\3 \4 \5....
再次强调,引用的是子表达式匹配的内容,是具体的文本
关于正向预查

复制代码 代码如下:

var reg = /I like (?=shanghai)/;
var str = 'I like shanghai';
matchReg(reg, str); //测试通过

str = 'I like beijing';
matchReg(reg, str); //不通过

跑下上面的代码,就马上理解什么算是正向预查了,如上面的例子,通过(?=pattern)的形式,正则 表达式预测下后面的内容是不是符合要求,如果是那就顺利匹配.
相对地,(?!=pattern)的使用意图正好与(?=pattern)相反,就不复述了
关于贪心和非贪心匹配模式

复制代码 代码如下:

// 贪心
var reg = /\d{1,}/;
var str = '1999';
matchReg(reg, str); // result[0]为1999 能多匹配就多匹配

// 非贪心
reg = /\d{1,}?/;
matchReg(reg, str); // result[0]为1 只匹配了一个

从上面的结果很容易看出"贪心"和"非贪心"的含义
pattern?这就表明非贪心匹配模式,一般情况就是贪心的
关于Regexp对象exec函数返回的结果

复制代码 代码如下:

// 关于返回结果是个什么
// matchReg函数中console.dir(result)能说明问题,firebug中一看便知
关于string的replace函数
function camelize(str) {
return str.replace(/-(\w)/g, function(inputStr, p1) {
console.log(p1);
return p1.toUpperCase();
});
}
console.log(camelize('background-color'));

function uncamelize(str, sep) {
sep = sep || '-';
return str.replace(/([a-z])([A-Z])/g, function(inputStr, p1, p2) {
console.log('p1:%s, p2:%s', p1, p2);
return p1 + sep + p2;
});
}
console.log(uncamelize('backgroundColor', '-'));

上面两个例子,主要用于说明replace函数的用法,当然还有search,split等函数可以充分利用正则表达式的优势
关于javascript正则表达式的最佳实践
就一句话:尽量的精简,不要复杂,利于读懂和维护!

javascript的正则表达式学习的更多相关文章

  1. 深入浅出的javascript的正则表达式学习教程

    深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要 ...

  2. javascript笔记——正则表达式学习笔记

    indexof 查找 substring 获取字符串 [) charAt 获取某个字符 split 分割字符串,获得数组 \s:空格 \S:非空格 \d:数字 \D:非数字 \w:字符 \W:非字符 ...

  3. 深入浅出Javascript的正则表达式

    深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要 ...

  4. JavaScript正则表达式学习笔记(二) - 打怪升级

    本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...

  5. javascript正则表达式 - 学习笔记

    JavaScript 正则表达式 学习笔记 标签(空格分隔): 基础 JavaScript 正则表达式是用于匹配字符串中字符组合的模式.在javascript中,正则表达式也是对象.这些模式被用于Re ...

  6. javascript中的正则表达式学习

    一.前言 关于正则表达式自身的语法这里不做过多介绍(详情可参见http://www.php100.com/manual/unze.html),这里仅仅解释javascript中和正则表达式相关的几个方 ...

  7. 如何使用JavaScript和正则表达式进行数据验证

    利用客户端JavaScript的优势,JavaScript中的正则表达式可以简化数据验证的工作,下面与大家分享下如何使用JavaScript和正则表达式进行数据验证,感兴趣的朋友可以参考下哈 数据验证 ...

  8. javascript之正则表达式基础知识小结

    javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料.   元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...

  9. 【学习笔记】JavaScript的基础学习

    [学习笔记]JavaScript的基础学习 一 变量 1 变量命名规则 Camel 标记法 首字母是小写的,接下来的字母都以大写字符开头.例如: var myTestValue = 0, mySeco ...

随机推荐

  1. Android系统属性简介

    查看Android源码你会发现,代码中大量存在:SystemProperties.set()/SystemProperties.get():通过这两个接口可以对系统的属性进行读取/设置,顾名思义系统属 ...

  2. swift-分支

    swift相当于OC的比较 if后的括号可以省略 if后只能接bool值 if后的大括号不能省略 let num1 = 5.0 let num2 = 4.0 let boo :Bool = true ...

  3. 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)

    ========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...

  4. 看看C# 6.0中那些语法糖都干了些什么(中篇)

    接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想 ...

  5. css之盒模型

    盒模型由内容(content).填充(padding).边框(border).边界(margin)组成,一个盒子中主要的属性就5个:width.height.padding.border.margin ...

  6. Oracle学习笔记十 使用PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  7. 记一次简单的SQL优化

    原来的sql是这样写的 SELECT d.ONSALE_BARCODE, d.ONSALE_NAME, c.ONSALE_ID, CAST( , ) ) AS CUSTOMARY_PRICE, CAS ...

  8. CFD冲蚀模拟的一些理论

    [TOC] 在CFD中计算颗粒对固体壁面的冲蚀往往采用冲蚀模型(Erosion Model). 1 冲蚀速率(Erosion Rate) 冲蚀速率定义为壁面材料在单位时间单位面积上损失的质量(单位:\ ...

  9. 【Swift】Alamofile网络请求数据更新TableView的坑

    写这篇BLOG前,有些话不得不提一下,就仅当发发恼骚吧... 今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的 ...

  10. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...