正则表达式 它是给计算机读取的一个规则
引入下
要把str中的数字 提取出来放进一个数组里边 [123,0,223].
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei";}
</style>
</head>
<body>
<script type="text/javascript">
/*
只获得数字
// if(!isNaN(str.charAt(i))){
// console.log(str.charAt(i));
// }
// if(str.charAt(i) == parseInt(str.charAt(i))){
// console.log(str.charAt(i));
// }
// if(str.charAt(i)>="0" && str.charAt(i)<="9"){
// console.log(str.charAt(i));
// }
*/
// 要把str中的数字 提取出来放进一个数组里边 [123,0,223]
// 常规做法
var str = "123num0br223d1312e";
var arr = [];
// var a = Number("1");
var res = ""
for(var i=0;i<str.length;i++){
// 0 -- 48 9 -- 57
if(str.charCodeAt(i)>=48 && str.charCodeAt(i)<=57){
res += str.charAt(i);
// console.log(res);
}else{
//null "" undefined NaN false 0
//为了 push非空res
if(res){
arr.push(res);
res = "";
};
};
}
if(res)arr.push(res);
console.log(arr);
// 正则
var pattern = /\d+/g;
console.log(str.match(pattern));
</script>
</body>
</html>
正则表达式方法
写法
var str = "qwe123";
var pattern = /123/;(推荐使用)
var pattern = new RegExp(表达式,标识符);
正则方法
test()
匹配到返回true
匹配不到返回false
exec()
匹配到返回一个查找字符相关的数组
匹配不到返回null
pattern.test(str);
字符串方法
match()
匹配到返回数组(匹配的项 看是否有标识符g)
search()
匹配总是返回匹配到的第一个符合条件的下标
匹配不到 -1
replace()
替换匹配的子表达式
str.match(pattern);
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei";}
</style>
</head>
<body>
<script type="text/javascript">
/*
*/
// test()
// var str = "string213a2"
// var pattern = /a/;
// alert(pattern.test(str));//true
// exec()
// var str1 = "box123";
// var pattern = /box/;
// console.log(pattern.exec(str1));
// lastIndex
/*
有匹配子项(a) 返回数组的差别
exec开启了全局 没有匹配完 再次去匹配时 起始索引是上次一的结束索引lastIndex
*/
// var str = "1232a22a1a1";
// var pattern = /\d+(a)/g; //g 全局 标识符
// console.log(pattern.exec(str));
// console.log(pattern.lastIndex);//5
// console.log(pattern.exec(str));
// console.log(pattern.lastIndex);//8
// console.log(pattern.exec(str));
// console.log(pattern.lastIndex);//10
// console.log(pattern.exec(str));
// 返回匹配字符
// var str = "where box a box";
// var pattern = /box/g;
// var result;
// while((result = pattern.exec(str)) != null){
// alert(typeof result);//object数组
// };
// match() 返回数组
//
// var str = "123s12d34r3";
// var pattern = /\d+/ //匹配数字一次
// var pattern1= /\d+/g //匹配全部数字. g全局
// console.log(str.match(pattern));
// console.log(str.match(pattern1));
// search() 返回查找字符的下标 没有 返回-1
// var str = "box1230";
// var pattern = /12/;
// var pattern2 = /a/;
// console.log(str.search(pattern));//3
// console.log(str.search(pattern2));//-1
//replace()
var str = "box1,box2,box3";
var pattern = /box/g; //被替换的字符
console.log(str);
console.log(str.replace(pattern,function(){
return "RegExp"; //替换的字符
}));
</script>
</body>
</html>
标识符 元字符 锚点 转义字符
标识符
g global全局匹配 匹配全部
i ignore忽略大小写
锚点
^ 开头 [^]代表非
$ 结尾
转义字符
\
\r 回车
\n 换行
\t tab制表符
元字符
\d 数字 [0-9]
\D 非数字 [^\d]
\w 字母数字下划线 [a-zA-Z0-9_]
\W 非字母数字下划线
\s 空格 tab
\S 非 空格 tab
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei";}
</style>
</head>
<body>
<script type="text/javascript">
// 转义字符 \
// var str = "12\\3";//12\3
// alert(str);
// i ==>ignore忽略大小写
// var str = "ABC";
// var pattern = /abc/i;
// alert(pattern.test(str));
// \d 数字
// var str = 'box213as213';
// var pattern = /\d+/g;
// var pattern = /[0-9]+/g;
// var pattern = /\D+/g;
// var pattern = /[^0-9]+/g;
// console.log(str.match(pattern));
// \w [a-zA-Z0-9_]字母数字下划线
// var str = "qwe123_";
// var pattern = /\w/;
// var pattern = /[a-zA-Z0-9_]/;
// alert(pattern.test(str));
// isNaN
// 判断是不是数字
// var str = "213123";
// alert(isNaN(str));
// var pattern = /\D/;
// if(!pattern.test(str)){
// alert("纯数字");
// }else{
// alert("非纯数字");
// };
// ^ 开头 [^]代表非 $ 结尾
var str = "box1213box1";
var pattern = /^\w+\d$/; //以字母数字下划线开头 ,以数字结尾
alert(pattern.test(str));
</script>
</body>
</html>
量词
量词
* 区间[0++] {0,}
+ 区间[1++] {1,}
? 区间[0,1] {0,1}
. 任意个字符
.* 大于0任意字符
[m,n] {m,n}
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei";}
</style>
</head>
<body>
<script type="text/javascript">
// var str = "go0gle";
// var pattern = /go*gle/; //==> /g{0,}gle/;
// var pattern = /^\wo+gle/; //==> /g{1,}gle/;
// var pattern = /go?gle/; //{0,1}
// alert(pattern.test(str));
// var str = "goooogle";
// var pattern = /go*gle/g; //o可以任意个
// var pattern = /go{4}gle/g; //o只可以4个
// var pattern = /go{4,8}gle/g; //o只可以4到8个
// alert(pattern.test(str));
// var str = "gooo@21321agle";
// var pattern = /go.*gle/g; //o后面接任意字符
// alert(pattern.test(str));
//
/*
贪婪模式 量词 * + {} 量词优先 尽可能多的去匹配
惰性模式 忽略量词 尽可能少的去匹配
*/
// var str = "wq2ew2qas_@@12321";
// // var pattern = /\w+/;
// var pattern = /\w/g;
// alert(str.replace(pattern,"prpr"));
// 惰性模式 忽略量词
// var str = "wq2ew2qas_@@12321";
// var pattern = /\w+?/; //值匹配第一个字符
// alert(str.replace(pattern,"prpr"));
// 惰性模式开启全局的话
// var str = "wq2ew2qas_@@12321";
// var pattern = /\w+?/g; //值匹配每个字符
// alert(str.replace(pattern,"prpr"));
//前提条件 都是要匹配成功
// var str = "box12box345";
// var pattern = /box\d{3}/;
// alert(pattern.test(str));
// var str = "box12boxbox34boxaa";
// var pattern = /box\d+?boxaa/;
// alert(pattern.test(str));
</script>
</body>
</html>
子集
/*
子集()
match 有子集的时候第二项返回的第一个子集子集内容 以此类推 第三项返回第二个子集
|
或者
*/
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei";}
</style>
</head>
<body>
<script type="text/javascript">
// var str = "box13box33bo";
// var pattern = /(box\d+)/;//第二项返回的第一个子集
// var pattern = /(box)\d+/g;//有全局 不返回
// console.log(str.match(pattern));
// var str = "abcd";
// var pattern = /(a(b(c(d))))/; //匹配abcd ===>返回子集abcd bcd cd d
// console.log(str.match(pattern));//
// console.log(str.match(pattern).length);//5
// 匹配压缩包 rar | zip | 7z
var str = '2017-4-7.zip'; //. 要转义 \.
// var pattern = /^[\w-\s-]+\.zip|rar|7z$/;
var pattern = /^[a-zA-Z0-9_-\s]+\.zip|rar|7z$/;
alert(pattern.test(str));
</script>
</body>
</html>
* replace*
/*
replace用途
有子集$0 $1 $2 ...
$0匹配项 $1第一个子集 ...
*/
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<style type="text/css">
* {margin: 0; padding: 0;}
a {text-decoration: none;}
ul,li {list-style: none;}
body {font-family: "Microsoft yahei";}
</style>
</head>
<body>
<script type="text/javascript">
/*
replace用途
有子集$0 $1 $2 ...
$0匹配项 $1第一个子集 ...
*/
// var str = "google baidu";
// var pattern = /(.*)\s(.*)/;
// alert(str.replace(pattern,'$2 $1'));一种写法
// alert(str.replace(pattern,function($0,$1,$2){
// console.log($0);
// return $2+" "+$1;
// }));
// 删除
// var str = "abc2017asda2";
// var pattern = /[\D]+/g;//非数字
// var pattern = /[^\d]+/g;//非数字
// console.log(str.replace(pattern,""));
// 屏蔽辣鸡话
//
var str = "你妈mmp,Nmb,sb";
var pattern = /妈|m.*m.*p|n.*m[\s]*b|s.*b/gi;
alert(str.replace(pattern,function($0){
console.log($0);
return "**";
}));
</script>
</body>
</html>