RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
语法:
1.new RegExp(pattern, attributes);
参数
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配.
g (即global的意思表示全文查找)
i (即ignore的意思表示忽略大小写)
m (即multiple rows的意思表示多行查找)
直接量语法
/pattern/attributes
下面上例子:
- re =new RegExp("d");//最简单的正则表达式,将匹配字母d
- re=new RegExp("d","i");//第二个参数,表示匹配时不分大小写
- var re = new RegExp("d","gi");//匹配所有的d或D
- 直接量的语法:var re=/d/gi;
test方法:
var str="we";//可以看作我们填写表单的用户姓名
var re=/we/;//这个正则表达式可以看作是是我预先设定好的
console.log(re.test(str));//true
str="We";
console.log(re.test(str));//false
re=/we/i;
console.log(re.test(str));//true
str = "I am a beautiful girl";
re=/be/;
console.log(re.test(str));//true
re=/^be/;//^表示以be开头
console.log(re.test(str));//false
re=/^be$/;//$表示以be结束
console.log(re.test(str));//false
str="be";
re=/^be$/;
console.log(re.test(str));//true
re=/\s/;//表示空格
str="wo wo";
console.log(re.test(str));//true
re=/[abc]/;//表示字符串里有abc里的任意一个或者多个字母都行不要求顺序
str="a";
console.log(re.test(str));//true
str="dbad";
console.log(re.test(str));//true
re=/^[abc]/;//表示以abc任意一个字母或者多个字母开头都行
str="adf";
console.log(re.test(str));//true
re=/[^abc]/;//查找任何不在方括号之间的字符即只有字符串里有不是abc的字符都是正确的
str="abd";
console.log(re.test(str));//true
re=/[1-9]/;查找字符串里有1-9任意一个或者多个数字的
str="ad1";
console.log(re.test(str));//true
re=/(red|blue|green)/;//表示查找的字符串里有redbluegreen一个或者多个字符串
str="redblue";
console.log(re.test(str));//true
str="redblueddf";
console.log(re.test(str));//true
//以上方法是test方法。返回true或false
match方法:
var str="Hellooo World! Hello W3School!";
var re=/o+/g;匹配包含一个或者多个o的字符串
console.log(str.match(re));//["ooo", "o", "o", "oo"]
var str="Hellooo_ World12! Hello W3School!";
var re=/\w+/g;//匹配所有的单词字符
console.log(str.match(re));//["Hellooo_", "World12", "Hello", "W3School"] 单词字符包括:a-z A-Z 0-9 以及下划线
var str="Give 100%!";
var re=/\W/g;//\W元字符用于查找非单词字符
console.log(str.match(re));//[" ", "%", "!"]
var str="Give";
var re=/\W/g;
console.log(str.match(re));//null
var str="Give 100%!";
var re=/\d/g;//表示查找所有的数字字符
console.log(str.match(re));//["1", "0", "0"]
var str="Give 100%!";
var re=/\D/g;//表示匹配所有的非数字字符
console.log(str.match(re));//["G", "i", "v", "e", " ", "%", "!"]
var re=/\S/g;//匹配所有的非空格字符
var re=/\b/;//匹配所有的边界字符
var str="moon";
var re=/\bm/;//表示匹配以m开头的字符
console.log(str.match(re));//["m", index: 0, input: "moon"]
var str="moon"
var re=/oo\b/;//表示以00结束的字符
console.log(str.match(re));//null
var str="moon"
var re=/oon\b/;//表示以00n结束的字符
console.log(str.match(re));//["oon", index: 1, input: "moon"]
var str="Visit W3School";
var re=/\bW3/g;//表示所有以W3开始的字符
console.log(str.match(re));//["W3"]
var re=/\B/;//表示非边界字符
//以上采用的是match方法返回的是数组找不到的话返回的是null
exec方法及与match的比较
var str = "Visit W3School, W3School is a place to study web technology.";
var re =/W3School/g;
console.log(re.exec(str));//["W3School", index: 6, input: "Visit W3School, W3School is a place to study web technology."]
console.log(str.match(re));//["W3School", "W3School"]
var str = "Visit W3School, W3School is a place to study web technology.";
var re = /W3School/g;
var result;
while ((result = re.exec(str)) != null) {
console.log(result)
}//["W3School", index: 6, input: "Visit W3School, W3School is a place to study web technology."]
// ["W3School", index: 16, input: "Visit W3School, W3School is a place to study web technology."]
在调用非全局的 RegExp.exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的。
但是在全局调用的时候二者就不一样了。match方法输入的结果是:["W3School", "W3School"] 而exec方法输出的["W3School", index: 6, input: "Visit W3School, W3School is a place to study web technology."]没有全部匹配出来。
当用while循环语句时:输出的是
//["W3School", index: 6, input: "Visit W3School, W3School is a place to study web technology."]
// ["W3School", index: 16, input: "Visit W3School, W3School is a place to study web technology."]
因此我们可以这么说,在循环中反复地调用 exec() 方法是唯一一种获得全局模式的完整模式匹配信息的方法。
//正则表达式实例的属性
var re = /[a-z]/i;
console.log(re.source);//[a-z]
//n+ 匹配任何包含至少一个 n 的字符串。
//对至少一个 "o" 进行全局搜索:
var str="Hellooo World! Hello W3School!";
var patt1=/o+/g;
console.log(str.match(patt1));//["ooo", "o", "o", "oo"]
// 对至少一个单词字符进行全局搜索
var str="Hello World! Hello W3School!";
var patt1=/\w+/g;
console.log(str.match(patt1));//["Hello", "World", "Hello", "W3School"]
//n* 匹配任何包含零个或一个 n 的字符串。
//对 "1" 进行全局搜索,包括其后紧跟的零个或一个 "0":
var str="1, 100 or 1000?";
var patt1=/10?/g;
console.log(str.match(patt1));//["1", "10", "10"]
//n{X} 匹配包含 X 个 n 的序列的字符串。
//对包含四位数字序列的子串进行全局搜索:
var str="100, 1000 or 10000?";
var patt1=/\d{4}/g;
console.log(str.match(patt1));//["1000", "1000"]
//n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
//对包含三位或5位数字序列的子串进行全局搜索:
var str="100, 1000 or 10000? 100000";
var patt1=/\d{3,5}/g;
console.log(str.match(patt1));//["100", "1000", "10000", "10000"]
n{X,} 匹配包含至少 X 个 n 的序列的字符串。
//对包含至少三位数字序列的子串进行全局搜索:
var str="100, 1000 or 10000?";
var patt1=/\d{3,}/g;
console.log(str.match(patt1));//["100", "1000", "10000"]
var re = /^[a-zA-z]\w{3,15}$/;// 表示以小写a到z开始或者大写A到Z开始也就是以字母开始后面跟着的是单词(单词包括字母数字和下划线)单词的长度为3到15位