1.正则表达式的定义
正则表达式是一个描述字符模式的对象。JavaScript的RegExp类表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替换功能,JavaScript的正则表达式语法是Perl5的正则表达式语法的大型子集
1.直接量定义(perl风格,本人较习惯用直接量):var reg = /exp/attributes
var pattern = /ccy$/;//匹配以ccy结尾的字符串;
var pattern = new RegExp(“ccy$”);;//匹配以ccy结尾的字符串;
2.直接量字符
正则表达式中的所有字母和数字都是按照字面含义进行匹配的。JavaScript正则表达式语法也支持非字母的字符匹配,这些字符需要通过反斜杠作为前缀进行转义。
demo:
/\n/.test('\nccy');//true 匹配 \nccy
/\n/.test('\\nccy');//false 不匹配 \ccy
/\n/.test('\\\nccy');//true 匹配 \\nccy
3.字符匹配
demo:
/\w\w\d\d\d/.test(‘lt666’);//true 匹配两个字母或者数字加三个数字的字符串
4.重复字符匹配
demo:
/\d{4,9}/.test(1314);//true 匹配4到9个数字
//下面的例子稍微有点复杂,仔细分析也很简单
/\w{3}\s?\w{2,4}\s+javascript+\s+[^(]/.test(‘ccy is javascript coder’);//true 匹配3个字母或数字加0个或1个空格加2到4个字母或数字加至少1个空格加javascript加至少1个空格加0个或多个左反圆括号字符
重复匹配还种模式:非贪婪模式(尽可能的少匹配),只需在待匹配的字符后跟随一个?
??、+?、?、{1,5}?
/\d{4,9}/.exec(131414131);//131414131
/\d{4,9}?/.exec(131414131);//1314
下面这种情况贪婪和非贪婪是一样的效果
/c+y/.exec(‘ccy’);//ccy
/c+?y/.exec(‘ccy’);//ccy
5.选择、分组和引用
javascript正则语法还包括指定选择项、子表达式分组和引用前一子表达式的特殊字符。
1.选择
字符 | 用于分隔供选择的字符,选择项的尝试匹配是从左至右,直到发现了匹配项。
undefined
不用断言截取如下
‘
7.修饰符
8.用于匹配模式的String方法
1.search(reg)
参数reg为正则表达式,返回第一个与之匹配的子串的起始位置,如找不到则返回-1
“javascript”.search(/script/i); //4
用以执行检索与替换操作,注意出现$n则说明匹配子表达式
“javascript”.replace(/javascript/gi,”JavaScript”);
3.match(reg)
返回一个由匹配结果组成的数组,如果reg中设置了修饰符g,则返回的数组包含字符串中的所有匹配结果,若没有g,就不会进行全局检索,只会检索第一个匹配。
“1 plus 2 equals 3”.match(/\d+/g); 返回[“1”,”2”,”3”]
4.split(param)
参数可以为字符串也可以为正则表达式
“1,2,3,4,5”.split(/
/);返回[“1”,”2”,”3”,”4”,”5”]
我们经常会匹配浏览器中cookie值
document.cookie=”name=ccy;age=18”;
/(^|;| )age=([^;]*)(;|$)/g.exec(document.cookie)[2];//18
9.RegExp对象
RegExp第一个参数包含正则表达式的主体部分,也就是直接量中两条斜线之间的文本,不论是字符串直接量还是正则表达式都使用 \ 字符作为转义字符的前缀,
因此当给RegExp()传入一个字符串表述正则表达式时,必须将 \ 替换成 \
第二个参数是可选的,只能传 g i m,或者它们的组合
var zipcode = new RegExp(“\d{5}”,”g”);
1.RegExp属性
source:是一个只读字符串,包含正则表达式的文本
global:是一个只读的布尔值,用以说明这个正则表达式是否带有修饰符g
ignoreCase:是一个只读的布尔值,用以说明正则表达式是否带有修饰符i
multiline:是一个只读的布尔值,用以说明正则表达式是否带有修饰符m
lastIndex:是一个可读/写的整数,如果匹配模式带有g修饰符,这个属性存储在整个字符串的下一次检索的开始位置,会被exec(),test()方法用到
2.RegExp方法
exec()
执行字符串的匹配检索,类似String.match(),都会返回一个数组
test()
当调用exec方法返回不为null则调用test方法返回为true