一、正则表达式通过RegExp类实现,RegExp对象的构造函数可以带一个或两个参数。第一个参数(或只有一个参数)是描述需要进行匹配的模式字符串,如果还有第二个参数,这个参数则指定了额外的处理指令。
定义正则表达式:
1、只匹配字符串中出现的第一个单词"cat";区分大小写
var reCat = new RegExp("cat");
2、匹配字符串中出现的全部"cat",而不是在找到第一个匹配后就停止;忽略大小写
var reCat = new RegExp("cat","gi");
也可以使用Perl风格的语法:
var reCat = /cat/gi;
二、创建一个RegExp对象后,把它应用到字符串上。RegExp和String的一些方法都可使用。
1、RegExp有个test()方法,如果给定字符串匹配这个模式,它就返回ture,否则返回false。
var sToMatch = "a fat cat";
var reCat = /at/;
alert(reCat.test(sToMatch)); //true
2、String对象的match()方法返回一个包含在字符串中的所有匹配的数组
var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /at/gi;
alert(sToMatch.match(reAt)); //at,at,At,aT,at,
3、String对象的search()方法返回在字符串出现的第一个匹配的位置,全局匹配正则表达式(带参数g)在使用search()时不起作用
var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /at/gi;
alert(sToMatch.search(reAt)); //3
4、扩展的字符串方法,replace()可以用用另一个字符串(第二个参数)来替换某个子串(第一个参数)的所有匹配。可以给第一个参数传递一个正则表达式
var sToChange = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /at/gi;
alert(sToChange.replace(reAt, "dog")); //a bdog, a Cdog, a fdog bdog, a fdog cdog
三、字符类是用于测试的字符的组合。通过将一些字符放入方括号[]中,可以去匹配第一个字符、第二个字符等等。
1、简单类,匹配方括号中的字符
var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /[ab]at/gi;
alert(sToMatch.match(reAt));
2、负向类,匹配方括号中除了^后面的字符
var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /[^ab]at/gi;
alert(sToMatch.match(reAt)); //Cat,fAt,faT,cat
3、范围类,匹配方括号中用横线“-”连起来的从什么到什么
var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";
var reAt = /[a-c]at/gi;
alert(sToMatch.match(reAt)); //bat,Cat,baT,cat
4、组合类,由几种其它的类组合而成的字符类
var sToMatch = "a bat, a Cat, a fAt baT, a faT cat,123at";
var reAt = /[a-c1-3]at/gi;
alert(sToMatch.match(reAt)); //bat,Cat,baT,cat,3at
5、预定义页,由于某些模式会反复用到,所以用一组预定义类可以更方便地指定复杂类
代码 等同于 匹配
. [^\n\r] 除了换行和回车之外的任意字符
\d [0-9] 数字
\D [^0-9] 非数字字符
\s [\t\n\x0B\f\r] 空白字符
\S [^\t\n\x0B\f\r] 非空白字符
\w [a-zA-Z_0-9] 单词字符(所有的字母、所有的数字和下划线)
\W [a-zA-Z_0-9] 非单词字符
四、量词,可以指定某个特定模式出现的次数。
代码 描述
? 出现零次或一次
* 出现零次或多次(任意次)
+ 出现一次或多次(至少出现一次)
{n} 一定出现n次
{n,m} 至少出现n次但不超过m次
{n,} 至少出现n次
五、分组,通过用一系列括号包围一系列字符、字符类以及量词来使用。
var sToMatch = "123123abcabcabc";
var re = /(123){2}(abc)?/gi;
alert(sToMatch.match(re)); //123123abc
例子:
var str = "123<div>456</div>789";
str = str.replace(/<div[\s\S]*?<\/div>/, ""); //去掉div及其中内容,结果123789