Js中的正则表达式
正则表达式可以用于字符匹配。
目录
一、正则表达式的定义
正则表达式在js中有下述两种定义,返回的都是正则表达式对象。
1. var reg = /regstr/[flag] ; 其中[flag] 可以舍去。
用//来表示一个正则表达式,//后面可以加
2.var reg=RegExp("regstr","flag");
可以传入一个正则表达式参数,第二个参数可以省略。
二、 正则表达式对象的方法
var reg = / / ;
var str = " ";
1. reg.test("str") ; //如果str某个子串符合reg正则表达式,返回true,否则返回false.
2. reg.exec("str") ; //返回一个object对象 ,包含str按照reg匹配到的字符的第一个下标,符合正则表达式的次数等。如果reg带有g,那么每次exec都会从上一次调用exec匹配到的下标开始匹配。
三、正则表达式的符号说明
在上述的参数中:
其中 flag可以为:
g: 匹配全文
i:匹配时忽略大小写
m:多行查找
当需要多个flag时,直接加至上一个flag后面,如: var reg = / /gi ; 注意gi与/不要有空格
其中正则表达式(上述的regstr)里可以有:
(1)直接写入匹配的字符
直接写入要匹配的字符,可以匹配多个字符。
例如:var reg = /abcd/gi;
^ : 正则表达式的开头
$: 正则表达式的末尾
如果正则表达式带有上述,就会严格匹配字符串是否符合,而不是搜索全文查找符合的字符串。
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var reg = /abcd/gi;
var reg1 = /^abcd$/gi;
console.log(reg.test("jipshroabcdjie")); // 输出true
console.log(reg1.test("jipshroabcdjie")); //输出false
</script>
</head>
<body>
</body>
</html>
(2)使用 [ ]
表示匹配[ ]内的字符中的某一个字符。只匹配一个字符。 例如: var reg = /[a-z]/gi;
如:
[a-z]: 表示的是a到z中的某一个字符。
[A-Z]: 表示的是A到Z中的某一个字符。
[0-9]: 表示的是0到9的某一个字符。
加上^就是匹配除了[]内的字符以外的字符。如果需要匹配的包含有^ - 可以在这两个前面加上\转义符,\^, \- 。
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var reg = /[a-z0-9]c/; //匹配两个字符
console.log(reg.test("0c")); // 输出true
console.log(reg.test("ac")); //输出true
console.log(reg.test("Ac")); //输出false;
</script>
</head>
<body>
</body>
</html>
(3) 使用预定义字符
匹配一定范围中的一个字符 。 例如: var reg = /\d\w\d/gi;
如:
. :一个点表示任意匹配字符中的一个字符。如果需要匹配指定"."在前面加上\
\d: 所有数字 [0-9]中某一个字符
\w: 表示 [a-zA-Z_0-9]中的一个字符
\s:表示空白字符[ \t\n\x0B\f\r]中的一个字符
上述\d,\w,\s字母大写的话就是取反,如\D就是取除了数字以外的一个字符
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var reg = /\d\w/;//匹配两个字符, 一个[0-9]一个[a-zA-Z_0-9];
console.log(reg.test("1_")); //输出true
console.log(reg.test("5a")); //输出true
console.log(reg.test("6D")); //输出true
console.log(reg.test("Ac")); //输出false
</script>
</head>
<body>
</body>
</html>
(4)使用量词
可以给一个字符添加匹配次数。也是在字符后添加。
当量词是有无数次时,当找到了满足要求的字符串,会无限的查找满足要求的,直到不满足要求才停止。
a* : a出现0次或无数次;
a+: a出现1次或无数次;
a?: a出现0次或1次;
a{m,n}: a出现m到n次;
a{m,} : a出现的次数>=m;
a{m}: a出现m次
上述a指的是任意一个字符或分组的多个字符。
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var reg = /[0-9]{1,5}[a-z]*\d+[A-Z]?/;
console.log(reg.test("w189203J")); //输出true
console.log(reg.test("5782912")); //输出true;
console.log(reg.test("8782996666aaaa8902"));//输出true
</script>
</head>
<body>
</body>
</html>
(5)使用分组
用()将多个字符看做一个整体。能够形成捕获性分组。
当()后面跟了量词时,就会把()内的所有字符当做一个整体来算。
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var reg = /([0-9][a-z])*/; // 两个字符出现0次或无数次
console.log(reg.test("1a88888")); //返回true
console.log(reg.test("jjj")); //返回true
console.log(reg.test("666")); //返回true
</script>
</head>
<body>
</body>
</html>
综上所述,我们发现有些符号代指了其他含义,如果我们需要用到该符号的实际含义的话,就需要在前面加上\符号,如: ( [ { \ ^ $ | ) ? * + .
四、字符串中可以使用正则表达式的方法
var str = " "; //代指字符串
var reg = / /; //代指正则表达式
(1)search(reg)
//返回按照reg搜索str字符串中符合内容的第一个下标,如果没有符合的就返回-1;
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var str = "uoq21hiou444gro17ds";
console.log(str.search(/\d+/)); // 输出3
</script>
</head>
<body>
</body>
</html>
(2)split(reg)
//返回一个字符串数组,按照reg在str中匹配正确的字符为分割点(匹配正确的不在返回字符串数组中,只是起到分割作用)
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var str = "uoq21hiou444gro17ds";
console.log(str.split(/\d+/));
</script>
</head>
<body>
</body>
</html>
控制台输出:
(3)replace("reg","rstr")
// 在str中按照reg匹配正确的第一个字符串被替换成rstr。如果reg有g则字符串符合匹配,全文替换。
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var str = "uoq21hiou444gro17ds";
console.log(str.replace(/\d+/,"666")); //uoq666hiou444gro17ds
console.log(str.replace(/\d+/g,"666")); //输出uoq666hiou666gro666ds
</script>
</head>
<body>
</body>
</html>
(4)match("reg")
//如果有reg中有g,则rstr按照reg匹配,返回所有匹配正确的数组,如果没有则返回第一次匹配成功的字符。匹配失败则返回null。
代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
var reg = /[0-9]{1,5}[a-z]*\d+[A-Z]?/;
var str = "8782996666a8902";
console.log(str.match(reg)); // 输出8782996666
</script>
</head>
<body>
</body>
</html>
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。