js正则表达式

来源:互联网 发布:威力导演是什么软件 编辑:程序博客网 时间:2024/04/28 18:29

正则表达式(正则表达式的对照表,什么引擎呀,请自行百度了解,我这么讲得就是简单的使用),又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。用来匹配数值大小范围就有些力不从心;(js ValidForm表单验证插件就是这样,验证匹配模式文本真的很好用,匹配数值范围,特别是位数多的数值真的很无奈的)。

正则表达式中的元字符包括:{ [ ( $ ^ | \ ? * + . ) ] } ;与其他语言的正则表达式类似,模式中使用的所有元字符都必须转义。

此篇如无特殊说明,讲的都是javaScript的正则,后期会继续展开数据库或者java使用正则的方法,其实匹配规则都是一样的,就是使用正则的调用方式区别。

ECMAScript通过RegExp类型来支持正则表达式;正则如果要扩展开真的会内容太多,就最初级的学学先怎么用起来;

var regexp = /pattern/flags;

pattern:模式部分可以是任何简单活复杂的正则表达式,可以包含字符类、限定符、分组、向前查找,以及反向引用。每个正则表达式可以带一个或多个标志(flags),用以表明正则表达式的行为。正则表达式的匹配模式支持下列3个标志:

g--表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;

i--表示不区分大小写(case-insensitive)模式,即在去顶匹配项时忽略模式与字符串的大小写;

m--表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在于模式匹配的项;

js有两种方式来定义正则表达式。一种是字面量形式,一种是使用RegExp构造函数。由于RegExp构造函数的模式参数是字符串,所以在某些情况下要对字符进行双重转义(所有元字符要进行双重转义)。

左边的字面量模式和右边的字符串格式是等价的;(不知道怎么排版了,竟然换行了

字面量模式字符串/\[bc\]at\/"\\[bc\\]at"/\.at/"\\.at"/name\/age/"name\\/age"/\d.\d{1,2}/"\\d.\\d{1,2}"/\w\\hello\\123/\\w\\\\hello\\\\123

RegExp实例具有下列属性:

global:布尔值,表示是否设置了g标志;

ignoreCase:布尔值,表示是否设置了i标志;

lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起;

multiline:布尔值,表示是否设置了m标志;

source:正则表达式的字符串表示,按字面量形式,而非传入构造函数中的字符串模式返回;
字面量模式和RegExp()构造函数的字符串模式等效;

(PS:xhEditor这个编辑器看来对转义字符的处理不太好,代码错乱了;将代码直接复制就不会影响阅读了)

var re = /\[bc\]at/i;document.write(re.global + "<br>");//falsedocument.write(re.ignoreCase + "<br>");//truedocument.write(re.lastIndex + "<br>");//0document.write(re.multiline + "<br>");//falsedocument.write(re.source + "<br>");//"\[bc\]at"var re1 = new RegExp("\\[bc\]at","i");document.write(re.global + "<br>");//falsedocument.write(re.ignoreCase + "<br>");//truedocument.write(re.lastIndex + "<br>");//0document.write(re.multiline + "<br>");//falsedocument.write(re.source + "<br>");//"\[bc\]at"

exec()为RegExp对象的主要方法,接受一个要应用模式的字符串,返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null;

测试模式匹配g(global全局模式匹配)和i(case-insensitive)忽略大小写匹配,以及多个模式匹配;m(multiline多行匹配)暂时不知道怎么去用,先不看;

var str1 = "cat,bAt,sat,fat";var re2 = /.at/g;var match = re2.exec(str1);document.write(match + "<br>");//catdocument.write(match.index + "<br>");//0document.write(match[0] + "<br>");//catdocument.write(re2.lastIndex + "<br>");//3//此处将re2匹配模式去掉,下面的匹配结果将与上面相同;match = re2.exec(str1);document.write(match + "<br>");//satdocument.write(match.index + "<br>");//8document.write(match[0] + "<br>");//satdocument.write(re2.lastIndex + "<br>");//11//下面两例测试多模式同时使用var re3 = /.at/gi;var match1 = re3.exec(str1);document.write(match1 + "<br>");//catdocument.write(match1.index + "<br>");//0document.write(match1[0] + "<br>");//catdocument.write(re3.lastIndex + "<br>");//3match1 = re3.exec(str1);document.write(match1 + "<br>");//bAtdocument.write(match1.index + "<br>");//4document.write(match1[0] + "<br>");//bAtdocument.write(re3.lastIndex + "<br>");//7

不设置g标志,IE9+和其他浏览器的lastIndex返回0;IE8-版本返回第一次匹配的index;可见在lastIndex属性上IE9有在实现上与目前主流浏览器趋同;(JavaScript高级程序设计第二版说:IE在非全局模式下,lastIndex属性每次也会变化。这点我就不清楚了,我的是IE11切换文档模式到IE8看的效果,不知道是否与IE8是否有区别);


明天继续。。。



0 0
原创粉丝点击