JS正则表达式
正则表达式:
regular expression, 按照指定规则匹配对应的字符串;简写为regex、regexp或RE)是用来描述字符排列和匹配模式的一种语法规则
作用:
主要用于字符串的模式分割,匹配,查找及替换操作
正则的组成:
定界符,元字符,模式修正符,表达式
1.定界符
正则表达式放在起始定界符和结束定界符之间
正则语法结构:/ 元字符 /[修饰符]
例:var str='hello world' console.log(str.match(/\w+/g)) //返回的值为数组类型 //检索字符串 以找到一个或多个与 regexp 匹配的文本。 regexp 具有标志 g则全局匹配,否则只匹配一次 // /g表示全局查询 // +表示匹配任何包含至少一个 n 的字符串
2.原子的筛选方式
1) | 匹配坚线两边的任意一个原子
注:若匹配到返回对应的字符串,若匹配不到返回空
var str='Hello World 123' console.log(str.match(/0|1|2|3|4|5|6|7|8|9/g))
2) [] 匹配方括号中的任意一个原子
-: 连字符, 用于字符集范围
var str='hello world 123' console.log(str.match(/[0123456789]/g)) console.log(str.match(/[A-Za-z]/g)) console.log(str.match(/[A-z]/g))
3) [^] 匹配除方括号中原子之外的任意字符
var str='Hello World 123' console.log(str.match(/[^A-z]/g))
3.原子的集合
1) . 查找单个字符,除了换行和结束符。 [^\n\r]
var uname="z32ang@576245762457624_san-2!"; alert(uname.match(/./g));
2) \d 匹配0-9的数字,相当于[0-9]
var uname="z32ang@576 2457\n6245\t76\v24_san-2!"; alert(uname.match(/\d/g)); alert(uname.match(/[0-9]/g));
3) \D 匹配除0-9之外的任意字符,相当于[^0-9]
alert(uname.match(/\D/g)); alert(uname.match(/[^0-9]/g));
4) \s 匹配一个空白字符,相当于[\f\n\r\t\v ]
alert(uname.match(/\s/g));
alert(uname.match(/[\f\n\r\t\v]/g));
5)\S 匹配一个非空白字符,相当于[^\f\n\r\t\v ]
alert(uname.match(/\S/g));
alert(uname.match(/[^\f\n\r\t\v]/g));
6) \w 匹配任意一个数字、大小写字母和下划线字符,相当于[0-9a-zA-Z_]
alert(uname.match(/\w/g)); alert(uname.match(/[0-9a-zA-Z_]/g));
7) \W 匹配任意一个非数字、大小写字母和下划线字符,相当于[^0-9a-zA-Z_]
例:var uname="z32ang@576245762457624_san-2!"; alert(uname.match(/\W/g)); //@,-,!
4.数量限定
{}指代一个范围(用于确定符号出现的次数),限定匹配元素出现的次数
1){n} 其前面的原子连续出现n次
var uname="z32ang@576 2457\n6245\t76\v24_san-2!"; alert(uname.match(/\d\d\d/g)); alert(uname.match(/\d{3}/g));
2){n,} 其前面的原子至少连续出现n次
数字至少出现5次
alert(uname.match(/\d{5,}/g));
3) {n,m} 其前面的原子连续出现n到m次
alert(uname.match(/\d{3,5}/g));
4)+ 匹配任何包含至少一个 n 的字符串。
alert(uname.match(/\d+/g)); alert(uname.match(/\d{1,}/g)); 使用+的时候会出现贪婪匹配 str="aaaaaaaaaa"; alert(str.match(/a+/)); //贪婪匹配 alert(str.match(/a+?/)); //取消贪婪匹配
5)* 匹配任何包含零个或多个 n 的字符串。
/*用户名-必须是字母(可以是数字)*/ var uname="ceshi";
6) ? 匹配任何包含零个或一个 n 的字符串。
/*用户名-必须是字母开头,后面最多只能跟一个数字*/ var uname="ceshi45"; alert(uname.match(/[A-z]+\d?/));
5.模式修正符
注:模式修正符定义在结束定界符的后面;也可以同时使用多个模式修正符
1) i 执行对大小写不敏感的匹配。
2) g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
var str="Is this Is this"; console.log(str.match(/i/ig));
6.RegExp(正则表达式) 和字符串对象的方法
1) test
语法:bool RegExpObject.test(string)
检索字符串是否匹配。返回 true 或 false
var reg = /^1([3-8]){1}\d{9}$/; alert(reg.test(13837160809));
2) exec
语法:bool RegExpObject.exec(string)
检索字符串中指定的值。返回找到的值,并确定其位置。
var str = "I like to eat apples, and my name is apple"; var reg = new RegExp("apple","g"); var result; while(result = reg.exec(str)){ alert(result); alert(reg.lastIndex); }
3) Match
语法:array stringObject.match(regexp)
检索字符串 以找到一个或多个与 regexp 匹配的文本。 regexp 具有标志 g则全局匹配,否则只匹配一次,最终以数组的形式返回几多
var str="1 plus 2 equal 3"; document.write(str.match(/\d+/g))
4)search
字符串.search(正则对象): 查找字符串中是否存在正则对象匹配子串. 如果存在返回 该子串 第一次出现时的下标(只匹配一次); 如果不存在 则返回 -1;
var txt = /万万岁/g; console.log(infor.search(txt));
5) replace
string stringObject.replace(regexp,replacement) 替换
name = "Doe, John"; console.log(name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1")); //john Doe console.log(name) //Doe, John
6)split
array stringObject.split(separator,howmany) 分割成数组
var str="How1are2 you 3doing 7today?"; alert(str.split(/\s+/));
7)int stringObject.search(regexp)
检索字符串中第一个与 regexp 相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回 -1。
var str="I'm studying web前端!" document.write(str.search(/web/i))