定义
正则又叫规则或模式,是一个强大的字符串匹配工具。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写的正则必须双重转义
转义字符
. 除换行符n之外的任意字符
d 数字
D 非数字
w 字母、数字、下划线
W 非字母、数字、下划线(汉字不属于w)
s 空格
S 非空格
b 边界符(w的左侧或右侧不是w,则会出现一个边界符)
B 非边界符
1 表示和前面相同的一个字符
t 制表符
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()里面的字符是系统转义字符