1.进行查询手机号的正则表达式
(1)exec()
//设置正则表达式的查询字符串
var str=“my phone is 13223543637 ,his phone is 18536901758 ,her phone is 13456744321”;
//设置正则表达式 正则表达式用//包裹,内容为以1开头 3578中的任意数字为第二个数字,\d/表示数字,{9}表示数字出现9次
var pattern=/1[3|5|7|8]\d{9}/g;
//查询用exec函数输出
console.log(pattern.exec(str);
//输出查询到的最后一个索引
console.log(pattern.lastIndex);
测试结果为:
图为查询三次并返回pattern。
exec():作用:查询字符串中是否有符合正则表达式的值
返回值:数组 第一个数组值为查询到的字符串,第二个数组值为查询到的字符串所在的索引值,input为查询的字符串, group表示分组。
(2)test()
测试结果:
test()函数,不能直接全部输出,调用一次函数输出查询的一个结果,设置全局搜索g,维护一个lastIndex属性,每次记录上次查询到的索引值,下次查询的时候,从上次记录的索引值开始查询。
test()的作用是查询是否由符合正则表达式的值, 有则返回true,没有则返回false。
当查询到无的时候,则返回开头重新查询。
补充:正则表达式相关知识:
-
实例化
- 字面量
var pattern = /正则表达式/匹配模式
var pattern = /\d{3}/g - 构造函数
var pattern = new RegExp(正则表达式,匹配模式);
匹配模式(标志)
i ignoreCase 忽略大小写
g global 全局匹配,每次记录下一次开始的位置。
m multiline 多行匹配
u unicode 使用 “u” 标志,任何 Unicode 代码点的转义都会被解释。
y sticky 属性反映了搜索是否具有粘性
- 字面量
-
API
静态方法:实例方法:
RegExp.prototype.exec() 执行检索
如果标志中有g,表示全局匹配,如果全局匹配,当前正则表达式对象会维护一个lastIndex的属性,表示下一次开始检索的位置。
参数:字符串
返回值:
数组, 数组中的元素为检索到的值,数组中属性index表示当前检索到的值在字符串中位置;input表示字符串;groups表示分组RegExp.prototype.test() 测试目标字符串是否匹配模式
如果标志中有g,表示全局匹配,如果全局匹配,当前正则表达式对象会维护一个lastIndex的属性,表示下一次开始检索的位置。
参数:字符串
返回值:
boolean,当为true表示目标串中包含模式匹配的内容实例属性:
RegExp.prototype.flags 获取正则表达式中的标志 igm
RegExp.prototype.source 获取正则表达式的字符串描述RegExp.prototype.global 是否进行全局匹配
RegExp.prototype.ignoreCase 是否进行忽略大小写匹配
RegExp.prototype.multiline 是否进行多行匹配
RegExp.prototype.sticky 匹配是否粘性
RegExp.prototype.unicode 匹配是否识别unicode -
专业理论
- 直接量
字符 /abc/ 匹配字符串"abc"
数字 /123/ 匹配数组123 - 字符类
[abc] /[abc]/ 匹配"abc"中任意一个字符
[^abc] /[^abc]/ 匹配非"abc"中任意一个字符
. 任意字符(除了换行符)
\w 任意字符 [a-zA-Z0-9]
\W 任意非字符 [^a-zA-Z0-9]
\s 任意空白符
\S 任意非空白符
\d 任意数字 [0-9]
\D 任意非数字 [^0-9] - 数量词
数量词应该应用到正则表达式的子表达式后
/\w{3}/ 任意3个字符
{3} 3次
{1,3} 1~3次
{1,} 1到多次
“+” 1到多次
? 0到一次
“*” 0到多次默认是贪婪匹配, 比如当数量词设置为{3,9},正则会尽可能多的进行匹配。如果希望非贪婪匹配,需要在数量词后添加? , 例如{3,9}?
-
选择
通过"|"分割
/ab|cd|ef/ -
分组
通过"()"分组 -
引用
\1 引用第一分组的结果,例如12abc12 -
多行匹配 flags包含 m
匹配的时候可以识别换行
匹配一行开始 ^
匹配一行结束 $
- 直接量
2.进行查询字符串中网址的正则表达式
代码如下:
使用exec()查询字符串中的网址,通过分组将两个不同的网址构造进行多项分割, 然后进行选择函数,进行查找。
注意:网址中的;/ /要用: / /进行转义。
测试结果: