关于反向引用
复制代码 代码如下:
// 测试函数
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 OOP类与继承
Javascript 解疑
xampp apache启动失效问题的解决方法
JavaScript中全局变量、函数内变量以及常量表达式的效率测试
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
php+javascript的日历控件
asp.net HttpHandler实现图片防盗链
JS、CSS文字切换,定时交替,代码精简
C# 面向对象的基本原则
lftp 贴心好友 备份服务器bash脚本
win2003 iis 不支持请求(iis iso)的解决方法分析
asp 实现的冒泡排序程序
asp.net用url重写URLReWriter实现任意二级域名 新
union组合结果集时的order问题
正则表达式中的反向预搜索实现
js 验证 常用正则表达式集锦
PHP 程序员的调试技术小结
javascript 面向对象编程 function是方法(函数)
asp.net+jquery Gridview的多行拖放, 以及跨控件拖放
CSS 渐变背景的6个演示代码
清除cookies的批处理(bat)
解決安裝了apache却找不到服务的问题
IIS SHTML支持设置方法(SSI)
asp 通用修改和增加函数代码
提示“处理URL时服务器出错”和“HTTP 500错误“的解决方法
asp.net 利用IIS的404错误将文件重写成目录的简单方法
php 向访客和爬虫显示不同的内容
获取网站跟路径的javascript代码(站点及虚拟目录)
jquery (show,fadeOut,Animate)简单效果
JavaScript 语法集锦 脚本之家基础推荐
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
JSP application(return String)用法详例
JS OOP包机制,类创建的方法定义
SQLServe 重复行删除方法
php面向对象全攻略 (二) 实例化对象 使用对象成员
jquery ajax 登录验证实现代码
php面向对象全攻略 (三)特殊的引用“$this”的使用
asp.net coolite 删除时弹出确定按钮
asp.net中url地址传送中文参数时的两种解决方案
扣代码工具 hta版
.net 动态标题实现方法
Python+Django在windows下的开发环境配置图解
php面向对象全攻略 (九)访问类型
javascript 面向对象,实现namespace,class,继承,重载
图片与JavaScript配合做出个性滚动条
sqlserver 中ntext字段的批量替换(updatetext的用法)
点击按钮后 文本框变为Select下拉列表框
MSSQL 计算两个日期相差的工作天数的语句
javascript实现的距离现在多长时间后的一个格式化的日期
学习ExtJS Panel常用方法