【笔记】 《js权威指南》- 第10章 正则表达式和模式匹配

1.定义正则表达式

var parttern = /[a-z]/;
var parttern = new RegExp("[a-z]");

2.直接量字符:

转义字符

^ $ . * + - ? = ! : |  \ / ()[]{} 这些符号由于在定义表达式中起到作用所以需要\进行转义。

3.字符类:



4.重复:


非贪婪的重复:

重复匹配语法会匹配最多的情况,非贪婪的重复实在重复匹配语法后加一个?他会去匹配最少的情况:

比如"aaab"字符串,用a+b去匹配会匹配整个字符串,而用a+?b则会匹配ab;


5.选择分组和引用:

(1).“|”选择:使用|分隔一个或者多个表达式,从左往右执行,当其中一个匹配右边的表达式将被忽略:

//原字符串"ab"只匹配a
/a|ab/
(2)."()"以及"\数字":

a.普通的组合作用;

b.d定义子模式,在成功匹配时引用圆括号中子模式相匹配的部分。这种引用方法通过在正则表达式最后添加"\数字"来实现,数字表示左括号的位置。

注意:使用"\数字"必须针对有圆括号包含的表达式。

//让左侧和右侧的引号匹配
/(['"])[^'"]*\1/

可以使用(?:...)的分组方式来跳过该分组:

//\2指向和[cd]匹配的结果
/([ab])([cd])([ef])\2/
//\2指向[ef]匹配的结果
/([ab])(?:[cd])([ef])/



6.指定匹配位置:

(1). \b:匹配单词边界:

//匹配this is Java Script
//不匹配this is JavaScript
/\bJava\b/

(2). \B: 匹配非单词边界:

//匹配xxxScriptxxx
//不匹配xxxScript, Script, Scriptxxx
/\BScript\B/

(3). (?=p): 必须出现符合p的表达式;

(4). (?!p): 不能出现符合p的表达式。



7.修饰符:

(1). 多行匹配修饰符m:

var str = "first\nJava";
console.log(str.search(/^Java/m));
//6



8.用于匹配模式的Sting方法:

(1). search, 返回第一个匹配索引,不支持g全局修饰符。

(2). replace: 将第一个匹配或所有匹配的子串替换为某一字符串,

第二个替换用的字符串参数可以使用"$数字的"来指代正则表达式中匹配的子表达式部分。

//将abc替换为xby
str = str.replace(/a(b)c/g, 'x$1y');
(3). match: 返回匹配的数组,如果表达式没有使用全局修饰符,

那么数组的第一位是第一个符合匹配的子串,而之后索引中的内容的则是带圆括号子表达式所表示的子串。


9.RegExp对象:

(1).用字符串定义表达式时\要写成\\,修饰符由构造函数的第二个参数定义:

var zipcode = new RegExp("\\d{5}", "g");
(2).属性:source属性对应表达式文本,global,ignoreCase,multiline属性对应修饰符的布尔状态,

lastIndex属性在全局匹配模式中表示下一次检索的开始位置。

(3).方法:

a.exec():

与string的match方法匹配非全局表达式的方法类似:

用exec方法模拟match匹配全局表达式:

var pattern = /Java/g;
var text = "JavaScript is  more fun than Java!";
var result;

while((result = pattern.exec(text)) != null) {
	console.log("Matched '" + result[0] + "'" + " at position " + result.index + "; next search begins at " + pattern.lastIndex);
}

//Matched 'Java' at position 0; next search begins at 4
//Matched 'Java' at position 29; next search begins at 33

b.test();

与exec方法相同,只是当exec返回null,test返回false。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值