定义
正则又叫规则或模式,是一个强大的字符串匹配工具。javascript通过RegExp类型来支持正则表达式
特性 [1]贪婪性,匹配最长的
[2]懒惰性,不设置/g,则只匹配第1个
写法perl写法(使用字面量形式)
var expression = /pattern/flags;
模式(pattern)部分可以是任何简单或复杂的正则表达式,可以包含字符串、限定类、分组、向前查找以及反向引用。每个正则表达式可以带一个或多个标志(flags),用以标明正则表达式的行为。正则表达式支持三个标志:
[1]g:表示全局模式(global)
[2]i:表示不区分大小写(ignoreCase)
[3]m:表示多行模式(multiline)
//匹配字符串所有"at"的实例var pattern1 = /at/g;
RegExp构造函数
RegExp构造函数接收两个参数:要匹配的字符串模式(pattern)和标志字符串(flags)(可选)
[注意]RegExp构造函数的两个参数都是字符串。且使用字面量形式定义的任何表达式都可使用构造函数
//匹配字符串所有"at"的实例var pattern = new RegExp("at","g");
两种写法的区别 字面量写法不支持变量,只能用构造函数的形式来写
[tips]获取class元素(因为classname是变量,只能使用构造函数的形式)
function getByClass(obj,classname){var elements = obj.getElementsByTagName("*");var result = [];var pattern = new RegExp( "(^|\s)"+ classname + "(\s|$)");for(var i = 0; i < elements.length; i++){if(pattern.test(elements[i].className)){result.push(elements[i]);}}return result;} [注意]ES3中,正则表达式字面量始终共享同一个RegExp实例,而使用构造函数创建的每一个新RegExp实例都是一个新实例。ES5中规定使用正则字面量必须像直接调用RegExp构造函数一样,每次都创建新的RegExp实例
语法
[注意]正则表达式中不能出现多余空格
元字符(14个) () [] {} ^ $ | ? * + .
[注意]元字符必须转义,即用 加转义字符,用new RegExp写的正则必须双重转义
转义字符. 除换行符
之外的任意字符
d 数字
D 非数字
w 字母、数字、下划线
W 非字母、数字、下划线(汉字不属于w)
s 空格
S 非空格
边界符(w的左侧或右侧不是w,则会出现一个边界符)
B 非边界符
1 表示和前面相同的一个字符
制表符
v 垂直制表符
uxxxx 查找以十六进制xxxx规定的Unicode字符(u4e00-u9fa5代表中文)
(w)(d)12 :1代表w当时所代表的值,2代表d当时所代表的值
[注意]正则表达式中的子项必须是用小括号括起来的,并且顺序以小括号的前括号出现的顺序为准
[tips]找出重复项最多的字符和个数
var str = "aaaaabbbbbdddddaaaaaaaffffffffffffffffffgggggcccccce";var pattern = /(w)1+/g;var maxLength = 0;var maxValue = "";var result = str.replace(pattern,function(match,match1,pos,originalText){if(match.length > maxLength){maxLength = match.length;maxValue = match1;}})console.log(maxLength,maxValue);//18 "f" 系统转义 alert()和console.log()里面的字符是系统转义字符