学习js 正则表达式
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位

浙公网安备 33010602011771号