18.正则表达式
- 正则用来定义一些字符串的规则,程序可以根据这些规则来判断一个字符串是否符合规则,也可以将一个字符串中符合规则的内容提取出来。
18.1 创建正则表达式
1. 构造函数创建正则表达式
var reg = new RegExp(“正则”,“匹配模式”);
注意:使用构造函数时,由于它的参数是一个字符串,而\是字符串中转义字符,如果要使用\则需要使用\\来代替
匹配模式:
- i:忽略大小写
- g:全局匹配模式
//test()
//使用这个方法可以检查字符串是否符合正则表达式的规则,如果符合返回true,否则返回false
var reg = new RegExp("a", "i");
console.log(reg.test("aajjj3"));
//true
2. 使用字面量创建正则表达式
语法:var reg = /正则表达式/匹配模式
匹配模式可以多个一起写:/gi
var reg = /a/i;
console.log(reg.test("abc"));
//true
//--------或的写法---------
//1. | 或
var reg = /a|b|c/;
//2. [] 或
//[abc] == a|b|c
var reg = /[abc]/;
//3. [x-y] 或 [x-y] x的ascii到y的ascii码之间的值
//[a-c] == a|b|c == [abc]
//---------元符号---------
18.2 正则表达【字符串】相关方法
- split()
- 可以根据指定内容将一个字符串拆分为一个数组
- 参数:
- 需要一个字符串作为参数,将会根据字符串去拆分数组
- 可以接收一个正则表达式,此时会根据正则表达式去拆分数组
var str = "acuggu"
var result = str.split(/[A-z]/);
console.log(result);
//"a,c,u,g,g,u"
- match()
- 可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
默认情况下我们的match只会找到第一个符合要求的内容,找到以后就停止检索 - 可以为一个正则表达式设置多个匹配模式,且顺序无所谓
var str = "hello abc aec abc"
//我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容
var result = str.match(/a[bef]c/ig);
console.log(result);
//"abc,aec,abc"
//match()会将匹配到的内容封装到一个数组中返回,即使只查询到一个结果
console.log(Array.isArray(result));
//true
- replace()
- 可以将字符串中指定内容替换为新的内容
- 参数:
- 被替换的内容,可以接受一个正则表达式作为参数
- 新的内容
var str = "hello abc aec abc"
//空串则为删除
//默认只会替换第一个
var result = str.search(/a[bef]c/gi, "@_@");
var result2 = str.search(/a[bef]c/gi, "");
console.log(result);
//"hello @_@ @_@ @_@"
- search()
- 可以搜索字符串中是否含有指定内容
如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到返回-1
- 它可以接受一个正则表达式作为参数,然后会根据正则表达式去检索字符串
var str = "hello abc aec abc"
var result = str.search(/a[bef]c/);
console.log(result);
//"6"
- serach()只会查找第一个,即使设置全局匹配也没用
18.3正则语法
- 量词
• 通过量词可以设置一个内容出现的次数,量词只对它前边的一个内容起作用
{n} 正好出现n次
{m,n} 出现m-n次
{m,} m次以上+至少一个,相当于{1, }
*个或多个,相当于{0, }
? 0个或1个,相当于{0,1}
- 边界表达式(不要在java中用,javaScript中用)
^:正则开始
$:正则结束 :注意结束前一个才是结束匹配
//以a开始
reg = /^a/
//以a结束
reg = /a$/
//只能匹配a
reg = /^a$/
reg.test("aaa");//false
reg.test("a");//true
表达式 | 匹配值 |
. | 匹配除换行符(\n、\r)之外的任何单个字符,相等于[^\n,\r]。【若想查找点必须用转义字符\.】 |
\w | 任意字母、数字、下划线, [A-za-z0-9_] |
\s | 匹配所有空白符,包括换行 |
\S | 非空白符,不包括换行。 |
\W | 除了任意字母、数字、下划线, [A-za-z0-9_] |
\d | 任意的数字 [0-9] |
\D | 除了数字 [ ^0-9] |
\b | 单词边界 |
\B | 除了单词边界 |
- 在正则表达式中使用\作为转义字符
\. 来表示.
\\ 表示\
- 用构造函数创建正则表达式【字符串的转义字符】
\\. 来表示.
\\\\ 表示\
- 匹配手机号
//1. 11位
//2. 以1开头
//3. 第二位3-9
//4. 三位以后任意数字九个
var phoneReg = /^1[3-9][0-9]{9}$/
- 去掉两端的空格:
var s = " f afa ";
s = s.replace(/^\s*|\s*$/g,"");
- 匹配单词
reg = /\bchild\b/
- 电子邮件的正则
<script>
/*
* 电子邮件:
* hello . nihao @ abc .com.cn
* 任意字母数字下划线 . 任意字母数字下划线 @任意字母(2-5位). 任意字母(2-5位) *
*
* \w{3,} (\.\w+)* @ [A-z0-9]+ (\.[A-z]{2,5}){1,2}
*
*/
var emailReg = /^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var email = "abc.hello@163.com";
console.log(emailReg.test(email));
</script>