1.正则表达式
用于定义一些字符串的规则,计算机可以根据正则表达式来检查一个字符串是否符合规则,或者将字符串中符合规则的内容提取出来。
2.创建正则表达式
--创建正则对象(构造函数方法创建)
语法:var 变量 = new RegExp("正则表达式","匹配模式");
匹配模式:① 值为 i ,忽略大小写;
② 值为 g ,全局匹配模式。
--使用字面量创建
语法:var 变量 = /正则表达式 / 匹配模式
使用字面量的方法创建更加简单,使用构造函数创建更加灵活。
3.正则表达式的基础方法
test() 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则,如果符合则返回true,否则返回false.
//(1)这个正则表达式可以来检查一个字符串中是否含有a
var reg1 = new RegExp("a");
//或 var reg = /a/;
var str = "bac";
var result = reg.test(str);
console.log(result); //返回 true
//(2)创建一个正则表达式检查一个字符串中是否有字母
//使用 | 或 [] ; [ab] == a|b 两者都表示a或b;
/*
*[a-z]表示a到z的任意小写字母
*[A-Z]表示A到Z的任意大写字母
*[A-z]表示任意字母
*/
var reg2_1 = /[a-z]/;
//检查一个字符串中是否含有abc或adc或aec
var reg2_2 = /a[bde]c/;
//(3)使用[^ ](除了)表示只要不跟^后的内容一样就可以(增删改都行)
var reg3_1 = /[^ab]/;
console.log(res3_1.test("abc")); //返回 true
console.log(res3_1.test("ab")); //返回 false
var reg3_2 = /[^[0-9]]/;
console.log(res3_2.test("123")); //返回 false
console.log(res3_2.test("a123")); //返回 true
4.字符串和正则相关的方法
-- split()
可以将一个字符串拆分为一个数组;该方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串。(这个方法即使不指定全局匹配,也会全部拆分)
var str = "1a2b3c4d5e6f7";
var result = str.split(/[A-z]/);
console.log(result); //返回 1,2,3,4,5,6,7
-- search()
可以搜索字符串中是否含有指定内容;如果搜索到指定内容,则会返回第一次出现的索引,如果没有则返回-1。(这个方法即使设置全局匹配,也只会查找第一个)
str = "hello abc hello aec afc";
//搜索字符串中是否含有abc 或 aec 或 afc
result = str.search(/a[bef]c/);
console.log(result); //返回 6 (abc中a的索引号)
-- match()
可以根据正则表达式,从一个字符串中将符合条件的内容提取出来,默认情况下match只会找到第一个符合要求的内容,找到以后就停止检索;我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容。
match会将匹配到的内容封装到一个数组中返回,即使只查询到一个结果。
str = "1a2b3c4d5e6f7A8B9C";
result = str.match(/[a-z]/ig);
console.log(result); //返回 a,b,c,d,e,f,A,B,C (数组)
-- replace()
可以将字符串中指定内容替换为新的内容,第一个参数是被替换的内容,可以接受一个正则表达式作为参数,第二个参数是新的内容;默认只会替换第一个出现的指定内容。
str = "1a2b3c4d5e6f7A8B9C";
result1 = str.replace(/[a-z]/g , "@");
console.log(result1); //返回 1@2@3@4@5@6@7A8B9C
result1 = str.replace(/[a-z]/ig , "");
console.log(result2); //返回 123456789
5.正则表达式语法
--量词
通过量词可以设置一个内容出现的次数,量词只对它前面的一个内容起作用。
{n} 表示正好出现n次;
{m,n} 表示出现m~n次;
{m, } 表示出现m次以上;
--其他
+ 表示至少有一个,相当于{1, };
* 表示0个或多个,相当于{0,};
?表示0个或1个,相当于{0,1};
^ 表示匹配开头(注意与[^ ]不同);
$ 表示匹配结尾(或终止),加了$后,后面不能再接内容;
. 表示查找单个字符,除了换行和行结束符。
//{n}
var reg1 = /a{3}/;
console.log(reg1.test("aaab")); //返回 true
console.log(reg1.test("aaaaa")); //返回 true
-------------------------------------------
var reg2 = /ab{3}/;
console.log(reg2.test("abbb")); //返回 true
console.log(reg2.test("ababab")); //返回 false
-------------------------------------------
var reg3 = /(ab){3}/;
console.log(reg3.test("ababab")); //返回 true
-------------------------------------------
//{m,n}
var reg4 = /ab{1,3}/;
console.log(reg4.test("abbab")); //返回 true
console.log(reg4.test("abbbbab")); //返回 false
-------------------------------------------
//+
var reg5 = /ab+/;
console.log(reg5.test("abb")); //返回 true
-------------------------------------------
//^
var reg6 = /^a/;
console.log(reg6.test("abb")); //返回 true
console.log(reg6.test("bab")); //返回 false
-------------------------------------------
//如果同时使用^和$,则要求马上开始和马上结束,即要求字符串必须完全符合正则表达式内容
var reg7 = /^a$/;
console.log(reg7.test("a")); //返回 true
console.log(reg7.test("aaa")); //返回 false
--转义字符 \
因为. 在正则表达式里本身就有规则定义,如果要在正则表达式里表示 . 这个符号,需要添加转义字符,即用 \. 来表示 . 。
但要注意,在使用构造函数创建正则表达式时时,由于它的参数是一个字符串,,而 \ 是字符串中的转移符,所以如果要使用则需要使用 \\ 来代替。
var reg1 = /\./;
//等同于
var reg2 = new RegExp("\\."); //或 r"\."
\w 表示任意字母、数字、_ 等同于 [A-z0-9_];
\W 表示除了字母、数字、_ 等同于 [^A-z0-9_] ;
\d 表示任意的数字 等同于[0-9] ;
\D 表示除了数字 等同于[^0-9] ;
\s 表示空格;
\S 表示除了空格;
\b 表示单词边界;
\B 表示除了单词边界。
// \b
//创建一个正则表达式检查一个字符串中是否含有单词child
var reg = /\bchild\b/;
console.log(reg.test("hello child ")); //返回 true
console.log(reg.test("hello children ")); //返回 false
操作案例:接受一个用户的输入并去掉前后的空格。
//var str = prompt("请输入你的用户名:");
var str = " he llo ";
//去掉空格即用""来代替空格
//去掉开头的空格
//不加*只能去掉开头的第一个空格,加*表示一个或多个(可用+代替)
//str = str.replace(/^\s*/, "");
//去掉结尾的空格
//加*与上同理(可用+代替)
//str = str.replace(/\s*$/, "");
//注意要给str赋新值
//如果只用或|来连接则只会满足两边的其中一个,所以加上全局匹配
str = str.replace(/^\s*|\s*$/g,"");
console.log(str); //返回 "he llo"
--注意
对于任意字母和任意数字的写法,如果写成[A-z0-9],某些浏览器的A-z可能不仅仅包含字母,还可能有其他字符,所以使用[A-Za-z0-9]会比较好。