正则表达式具有强大的文本处理能力,能够添加、删除、分离、叠加、插入和修整各类的文本和数据。
在这里推荐学习工具——正则表达式在线学习工具
区别在于: 1.采用字面量的写法新建的正则表达式对象在代码编译时就会生成,是平常开发中常用的方式; 2.采用构造函数生成的正则对象要在代码运行时生成。 [使用正则表达式]: 正则对象的方法是指这样使用的: RegExp对象.方法(字符串) 字符串对象的方法是这样使用:字符串.方法(RegExp对象)
字符转义,转义字符为’\’,它表示取消这些自负在表达式中具有的特殊意义。
有三种情况: 1.\加元字符表示匹配元字符所使用的普通字符。 2.\加非元字符表示由具体实现方式规定其意义的元字符序列 3.\加上任意其他字符表示匹配该字符(也就是说反斜线被忽略)
重复 懒惰匹配:在限定符后面添加一个字符?就表示尽可能少的重复限定符号的重复次数
a.*b是一种贪婪匹配,匹配以a开头,b结尾的最长字符串 a.*?b就是懒惰匹配,匹配以a开头,b结尾的最短字符串 如果要匹配aabab,那么前者匹配出aabab,后者匹配aab和ab,不会匹配aabab
/['"][^'"]*['"]/表示引号包裹的字符 /['"][^'"]*\1/表示引号包裹的字符并要求引号匹配
注意!!!!!!
在字符组内部,元字符的定义规则是不一样的。例如在字符组外部,点号是元字符,但是在内部不是。相反,连字符只有在字符组内部才表示范围关于多选项和字符组不能混淆。无论列出多少字符,字符组只能匹配一个字符,相反,多选项可以匹配多个字符(如[abc]与(a|b|c))。取反表示所有未列出字符的简便方法。零宽度断言从字面意思可以看出零宽度也就是不占位置的意思,即匹配的是一个位置 负向零宽度断言与零宽度断言相反,能够指定或者匹配不止一个位置。
字符解释^行的开始位置$行的结束位置\A必须出现在字符串的开头\Z必须出现在字符串的结尾或者字符串结尾处的换行符之前\z必须出现在字符串的结尾\G必须出现在上一个匹配结束的地方\b字符的开始或者结束\B不是字符的开始或者结束的位置(?=experssion)零宽正向先行断言(又称为肯定顺序环视),断言自身位置后面能够匹配表达式experssion(?!experssion)零宽负向先行断言(又称为否定顺序环视),断言自身的位置后面不能匹配字符串experssion(?<=experssion)零宽正向后发断言(又称为肯定逆序环视),断言自身位置的前面能够匹配表达式experssion(?<!experssion)零宽负向后发断言(又称为否定逆序环视),断言自身位置的前面不能匹配字符串experssion举个栗子
(?=abcd)ab //表示匹配abcd中的ab \b\w+(?=ed\b) //匹配以字符串ed结尾的单词的前面部分 (?<=\ban)\w+\b //匹配以字符串an开头的单词的后面部分 \b\w{3}(?!\d+) //匹配长度为3的字符串,并且后面不能是数字字符串 (?<!\d+)[A-Z]+ //匹配不能是数字开头的、开头只能是大写字母的字符串注意,javascrip不支持后发断言。
举个栗子
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); } //text3.html:15 matched 'java' at position0next search begins at 4 //text3.html:15 matched 'java' at position28next search begins at 32