js正则表达式学习和总结(必看篇)
|
最近在做一个小项目时用到了正则匹配,感觉正则挺好用的,所以打算抽时间来小小总结一下。 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。正则表达式是一种查找以及字符串替换操作。 新建正则表达式 方式一:直接量语法 var reg = /pattern/attributes 方式二:创建 RegExp 对象的语法 var reg = new RegExp(pattern,attributes); 参数说明: 参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。 两者区别在于: 正则表达式使用: 正则对象的属性和方法 属性 ignoreCase 返回布尔值,表示RegExp 对象是否具有标志 i i 执行对大小写不敏感的匹配 g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 通常用于两种任务: 1.验证 2.搜索替换 字符类匹配 […] 查找方括号之间的任何字符 重复字符匹配 {n,m} 匹配前一项至少n次,但不能超过m次 匹配特定数字 ^[1-9]d*$ 匹配正整数 匹配特定字符串 ^[A-Za-z]+$ 匹配由26个英文字母组成的字符串 方法 test方法 检索字符串中指定的值。返回 true 或 false。 Demo1: 如果正则表达式带有g修饰符,则每一次test方法都从上一次匹配结束的位置开始匹配。 使用了g修饰符的正则表达式,表示要记录每一次搜索的位置,接着使用test方法,每次开始搜索的位置都是上一次匹配的后一个位置。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>test方法</title>
</head>
<body>
<script type="text/javascript">
var reg = /abc/g;
var str = "123abc456abc";
console.log(reg.lastIndex);//0
console.log(reg.test(str));//true
console.log(reg.lastIndex);//6
console.log(reg.test(str));//true
console.log(reg.lastIndex);//12
console.log(reg.test(str));//false
</script>
</body>
</html>
Demo2: 如果正则表达式是一个空字符串,则会匹配所有的字符串,但需要使用new RegExp()方式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>test方法</title>
</head>
<body>
<script type="text/javascript">
console.log(new RegExp('').test('abc'));//true
console.log(/''/.test('abc'));//false
console.log(/''/.test("''"));//true
</script>
</body>
</html>
exec方法 exec() 方法用于检索字符串中的正则表达式的匹配。 返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。 Demo1: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>exec方法</title> </head> <body> <script type="text/javascript"> var str = "xyz"; var reg1 = /x/; var reg2 = /a/; var res1 = reg1.exec(str); var res2 = reg2.exec(str); console.log(res1);//["x",index: 0,input: "xyz"] console.log(res2);//null </script> </body> </html> Demo2: 如果正则表达式包含圆括号,则返回的数组会包括多个元素。首先是整个匹配成功的结果,后面是圆括号里匹配成功的结果,如果有多个圆括号,他们的匹配成功的结果都会成为数组元素 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>exec方法2</title> </head> <body> <script type="text/javascript"> var str = 'abcdabc'; var reg = /(a)b(c)/; var res = reg.exec(str); console.log(res);//["abc","a","c",input: "abcdabc"] </script> </body> </html> 对于调用exec方法后返回的数组具有以下两个属性: input 整个原待匹配的字符串 search方法 search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。 返回值: stringObject 中第一个与 regexp 相匹配的子串的起始位置。 注释:如果没有找到任何匹配的子串,则返回 -1。 search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。 Demo: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>search方法</title> </head> <body> <script type="text/javascript"> var str = "abcdcef"; console.log(str.search(/c/g));//2 </script> </body> </html> match方法 match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。 字符串对象的match方法与正则对象的exec方法比较类似: 但是如果正则表达式带有g修饰符,那么match方法与exec方法就有差别了: 可以看到match返回了所有成功匹配的结果,但是exec方法只返回了一个。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>match方法</title> </head> <body> <script type="text/javascript"> var str = "abcd"; var reg1 = /a/; var reg2 = /x/; console.log(str.match(reg1));//["a",input: "abcd"] console.log(str.match(reg2));//null var str = "abcdabc"; var reg = /a/g; console.log(str.match(reg));//["a","a"] console.log(reg.exec(str));//["a",input: "abcdabc"] </script> </body> </html> replace方法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 返回值:一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
