RegExp对象
RegExp对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
直接字面量语法
/pattern/attributes
例子:
var reg=/hello/i;//匹配hello,加了i忽视大小写
var str="helloword"
var result=str.match(reg);
console.log(reg)
console.log(result)
var result2=reg.exec(str)
console.log(result2)
var result3=reg.test(str);//返回true/false
console.log(result3)
结果:
创建 RegExp 对象(构造函数)
使用构造函数。使用是一样的
var reg1=new RegExp("hahaha","i");
console.log([reg1]);
RegExp 对象属性
RegExp 对象方法
支持正则表达式的 String 对象的方法
例子:
var str="hahabc abc hah okk Abc lem abc"
var reg=/abc/ig;//全局查找,忽视大小写
var result1=str.search(reg);
console.log(result1)
var result2=str.match(reg);
console.log(result2)
var result3=str.replace(reg,"xyz");
console.log(result3)
var result4=str.split(reg);
console.log(result4)
结果:
参数
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串,包含属性 “g”、“i” 和 “m”,分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
正则的规则
方括号
例如:【注】^$意思是开头结尾限定
//第一个字母为axb中任意一个字符。
var reg1=new RegExp("[axb]hahaha","i");
var res=reg1.test("xhahaha")//结果为true
//第一个字母不能是axb
var reg2=new RegExp("[^axb]hahaha","i");
var res=reg2.test("xhahaha")//结果为false
//[0-9] 查找任何从0至 9 的数字
var reg3=new RegExp("^[0-9]ha$","i");
var res=reg3.test("1ha")//结果为true
//(red|blue|green) 查找任何指定的选项。
var reg4=/red|blue|green/
var res=reg3.test("green")//结果为true
元字符
\w 匹配字母或数字或下划线或汉字 等价于 ‘[^A-Za-z0-9_]’。
\W 匹配特殊字符,即非字母、非数字、非汉字、非_
例子:
var reg=/^.$/
var res=reg.test("a")//任意字符为true
// 匹配字母或数字或下划线或汉字
var reg1=/^\w$/
var reg2=/^[A-z]$/
//匹配数字
var reg3=/^\d$/
//匹配单词边界
var reg3=/abc\b/
var res1=reg3.exec("okabcok")//结果为null
var res2=reg3.exec("ok,abc,ok")//结果为["abc", index: 3, input: "ok,abc,ok", groups: undefined]
量词
例子:
//11位数字
var reg=/^\d{11}&/
//至少有一个c,abc、abcc、abccc合法
var reg=/^abc+&/
//0个或多个c
var reg=/^abc*&/
//零个或一个c
var reg=/^abc?&/
//qq号码,6位到12位
var reg=/^\d{6,12}&/
var res=reg.test("12345")//false
//6位以上
var reg=/^\d{6,}&/
//等等
参考网址:https://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
声明量词
var str="omg abc okk abc haha"
//正向肯定模式
//匹配的是abc前面的多于一个字母和一个空格的字符串
var reg=/\w+\s(?=abc)/g
var result=str.match(reg)//结果:["omg ", "okk "]
console.log(result)
//正向否定模式
var reg1=/\w+\s(?!abc)/g
var result1=str.match(reg1)//结果:["abc ", "abc "]
console.log(result1)
//反向肯定预查
var reg2=/(?<=abc)\s\w+/g
var result2=str.match(reg2)//结果:[" okk", " haha"]
console.log(result2)
//反向否定模式
var reg3=/(?<!abc)\s\w+/g
var result3=str.match(reg3)//结果:[" abc", " abc"]
console.log(result3)
正则组
<script type="text/javascript">
var str='<a href="http://baidu.com">百度</a>';
var reg=/<a href="(.*?)">(.*?)<\/a>/ //()里是子匹配
var result=str.match(reg)
console.log(result)
var reg1=/<a href="(?<url>.*?)">(?<content>.*?)<\/a>/ //子匹配命名
var result1=str.match(reg1)
console.log(result1)
console.log(result1.groups.url)
</script>
结果: