一 正在表达式的概述
1、正则表达式
正则表达式描述了一种字符串匹配的模式,可以检查一个字符串是否含有某种子字符串,将匹配到的子字符串用来提取出来或者做替换。
模式:使用一种特殊符号来实现字符串的匹配。
本文以javascript来阐述正则表达式的基础知识和使用
功能:使用一种特殊符号来实现字符串的匹配
var reg = /\d/gi;
mysql如何匹配:
① 精准匹配 :select * from goods where title=’iphone 7 plus’; //一条
② 模糊匹配 :select * from goods where title like ‘%iphone 7 plus%’; //多条
2、为什么要使用正则表达式
数据隐藏 (188********092张武功)
数据采集 (数据爬虫)
数据过滤 (数据敏感词过滤,比如一些侮辱性词语)
数据验证 (表单验证常用,比如 手机号验证、邮箱验证...)
3、快速入门
例1:查找一个字符串中是否具有数字“8”(可以使用indexOf)
var a1 = 'ni shi ge hen shuai de ren';
var a2 = 'ni shi ge bu shuai de ren 12800,.....';
var reg = /8/gi
//1、 test() 检测子字符串是否存在,返回boolean值
console.log(reg.test(a1))
/* 结果false */
console.log(reg.test(a2))
/* 结果true */
例2:查找一个字符串中是否具有数字(数字是从0-9,可以使用charAt)
var a1 = "xiyangyang";
var a2 = "xiyangyang2";
var reg = /\d/gi
reg.test(a1); /* 结果false */
reg.test(a2); /* 结果true */
例3:查找一个字符串中是否具有非数字
var b1 = "zhongguo";
var b2 = "zhongguonihaoa10-01";
var reg = /\D/i;
reg.test(b1);
/* 结果true */
reg.test(b2);
/* 结果true */
二、正则对象
1、为什么要使用正则对象呢?
在实际应用中,要使用正则表达式必须有一个前提,首先要创建正则对象
2、创建正则对象
①隐式创建
var 正则对象 = /正则表达式/匹配模式
②直接实例化
var 正则对象 = new RegExp('正则表达式', '匹配模式')
问题:隐式创建与直接实例化有什么区别呢?
答:两者之间的功能是完全一致的,都是为了获得正则对象。但是两者之间的区别主要在于语法的不同。
例:求三位连续的数字
隐式创建:
var reg = /\d\d\d/gi;
直接实例化
var reg = new RegExp('\\d\\d\\d');
由以上代码可知,两者功能完全一致,唯一区别在于语法的不同,直接实例化RegExp中,正则表达式需要对反斜杠 \进行转义操作
var a = "123abc567cvs";
var reg = new RegExp('\\d\\d\\d','gi');
reg.test(a);
//结果true
3、匹配模式
基础语法
var reg = /正则表达式/匹配模式
g:global缩写,代表全局匹配,匹配出所有满足条件的结果
i: ignore缩写,代表忽略大小写,匹配时,会自动忽略字符串的大小
示例代码
var str = "abcdefg"
var reg = /cde/gi
console.log(reg.test(str))
/*结果true*/
4、 与正则表达式相关的几个方法
① RegExp类下的方法(reg.test或 reg.exec)
test(str):判断字符串中是否具有指定模式的子字符串,返回结果是一个布尔类型的值
exec(str):返回字符串中指定模式的子字符串,一次只能获取一个与之匹配的结果
示例
<!--一个输入框和两个按钮-->
<!--引入jquery.js 不引入的可写原生js-->
/*获取btn1按钮并绑定点击事件*/
$("#btn1").onclick = function(){
/*获取文本框的值*/
let content = $('#content').value;
/*获取正则对象,规则三位挨着的数字*/
let reg = /\d\d\d/gi
/*判断*/
alert(reg.test(content));
}
/*获取btn2按钮并绑定点击事件*/
$("#btn2").onclick = function(){
/*获取文本框的值*/
let content = $('#content').value;
/*获取正则对象,规则三位挨着的数字*/
let reg = /\d\d\d/gi
/*输出匹配到的数据*/
alert(reg.exec(content));
}
② String类下的方法(str.方法(reg))
String.search(reg):与indexOf非常类型,返回指定模式的子串在字符串中首次出现的位置。
String.match(reg):以数组的形式返回指定模式的字符串,可以返回所有的匹配的结果。
String.replace(reg, '替换后的字符'):把指定模式的子串进行替换操作。
String.split(reg):以指定模式分割字符串,返回结果为数组。
示例:使用以上方法查找字符串中三个连续数字
var str = "abcd345efg188vbncmd255hjak";
var reg = /\d\d\d/gi;
/*String.search(reg) 返回子串首次出现的位置*/
console.log(str.search(reg));/*结果: 4 */
/*String.match(reg) 返回所有匹配结果*/
console.log(str.match(reg));/*结果: ["345", "188", "255"] */
/*String.replace(reg) 返回所有匹配结果*/
console.log(str.replace(reg, '帅'));/*结果: abcd帅efg帅vbncmd帅hjak */
/*String.split(reg) 返回所有匹配结果*/
console.log(str.split(reg));/*结果: ["abcd", "efg", "vbncmd", "hjak"] */