正则
目录
前言
正则与正则表达式是编程中经常用到的一种“模板” 用以匹配想要的字符串。学会正则会让你的代码更加简洁,且匹配性能更好。
一、什么是正则?
一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
而正则即指的是根据模板去匹配字符串的过程。
作用:提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法可以快速地分析大量的文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字符串添加到集合以生成报告。 一般用于验证 或是字符串的查找与替换
二、如何使用正则表达式。
用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。可以通过在一对分隔符之间放入表达式模式的各种组件来构造一个正则表达式。对 JScript 而言,分隔符为一对正斜杠 (/) 字符。
文本格式: /pattern/flags
参数说明:
pattern :一个正则表达式文本
flags : 如果存在,将是以下值:
g : global match(全局匹配)
i :ignore case(忽略大小写)
gi : both global match and ignore case(匹配所有可能的值,也忽略大小写)
可以由如下两种方式进行创建: var re = new RegExp('\w+') var re = /\w+/ 是等价的
实例如下所示:
<title>正则表达式</title>
<script type="text/javascript">
/*正则表达式 1621906970@qq.com 是一个正确的电子邮件地址
邮件的规则:1.前边可以是字母数字 2.跟一个@ 3、跟字母+数字 4、跟一个.com
正则表达式 用于定义一些字符串的规则 计算机可以根据表达式来检测一个字符串是否符合规则
或者将符合规则的内容提取出来 由我们定义 计算机来判断 */
//先创建一个正则表达式对象
var reg = new RegExp("a");//需要传入两个字符串参数 第一个是正则表达式 第二个是匹配模式
console.log(reg);
console.log(typeof reg);//正则表达式也是一个对象
var str = "a";//建立一个字符串等会来看看是否符合正则表达式规则
//正则表达式的test方法 检查一个字符串是否符合该表达式的规则 符合返回true
var result = reg.test(str);
console.log(result);//返回true 符合规则 !严格区分大小写
console.log(reg.test("sjasjs"));//上面的正则表达式a用来检查一个字符串里面是否含有a 位置不重要 含有a则返回true !区分大小写
//在构造函数中可以传递一个匹配模式作为第二个参数可以是
// i- 忽略大小写 g-全局匹配模式 var reg = new regexp("a",i);
console.log("______________________________________________________");
//可以用下面的式子快速简单的创建一个正则表达式 使用字面量创建
reg = /a/i;//简单 但没有构造函数法灵活
console.log(reg.test("babc"));
//创建一个正则表达式 检查字符串中是否含有a或b
reg = /a|b/;//用|表示或者的意思 检查字符串中是否含有a或b 等价于reg = /[ab]/;也是a或b
console.log(reg.test("bcd"));
console.log(reg.test("abecd"));
//下面创建一个正则表达式检查字符串中是否含有字母
reg = /[a-z]/ ; //是否含有任意小写字母
console.log(reg.test("k"));
//类似的 [A-Z]是否含有任意大写字母 [A-z] 是否含有任意字母;
//下面检查一个字符串是否含有abc或者adc或者aec
reg = /a[bde]c/;
console.log(reg.test("afadcfa"));
reg = /[^ab]/ //除了ab以外的东西 只要 有 就返回true___^“除了“
console.log(reg.test("ab"));
console.log(reg.test("abc"));
//[0-9]任意数字
reg = /[^0-9]/;//除了数字 只要表达式里含有数字以外的东西都返回true
</script>
三、正则表达式语法
3.1 语法(一)基础处理
<title></title>
<script type="text/javascript">
/*创建一个正则表达式检查一个字符串中是否含有aaa
通过量词可以设置内容出现的次数{n}正好出现n次!量词只对前面的一个字符生效 要对多个需要用括号圈出
{m,n}设定的内容出现m,n次 n省略则表示出现m次及以上
{n+}表示匹配 至少有一个n
{n*}表示0个或多个 即有没有都行
{n?}表示0个或者1个 相当于{0,1};
*/
var reg = /aaa/;
console.log(reg.test("aaabcd"));//下面使用大括号代表量词
reg = /a{4}/ ;
console.log(reg.test("jaksiaaaaojfo"));
reg = /(ab){3}/;
console.log(reg.test("absjabababjsks"));
reg = /(ab){1,3}c/;//ab出现一次两次三次都行再加一个C就可以输出true
console.log(reg.test("abc"));
console.log(reg.test("ababc"));
console.log(reg.test("abababcss"));
console.log(reg.test("ababababc"));
reg = /ab*c/;
console.log(reg.test("abc"));
//检查一个字符串是否以a开头
reg = /^a/;//以a开头 区别于 [^a]除了a
console.log(reg.test("afffsac"));
console.log(reg.test("baafffsac"));
reg = /a$/;//匹配以a为结尾的字符串
console.log(reg.test("jaskfjajif"));
console.log(reg.test("jaskfjajifa"));
//把上面的结合起来 /^a$/ 则表示两符号中间的正则表达式必须完全匹配 若 /^a|a$/ 以a开头或者以a结尾。
//下面创建一个正则表达式 检查是否是一个合适的手机号
//手机号规则:1、11位数字 2、第一位是1 3、第二位不能是0 1 2. 3、第三位开始是任意数字9个
reg = /^1[3-9][0-9]{9}$/;
var phonestr = prompt("请输入一串号码");
alert(reg.test(phonestr));
</script>
3.2 语法(二) 字符数字限定词处理
<title></title>
<script type="text/javascript">
/*检查一个字符串中是否有 . (.有特殊含义 查找单个字符 所以需要做转义处理)
\w---任意字母数字、或下划线
\W---与上面的正好相反
\d---任意的数字
\D---与上面的正好相反 除了任意的数字
\s---空格
\S---除了空格
\b---单词边界
\B---除了单词边界
*/
var reg = /\./;
console.log(reg.test("b.c"));
var reg = /\\/;//查找是否有一个\字符
console.log(reg.test("jskfjk\\jsfj"));//基本上在编程 的任何地方需要用到\的地方都要打两个
reg = new RegExp("\.");//这里其实打印出来只有一个. 若想让\发挥出对.转义的作用需要两个\\
//与直接 var reg创建正则表达式不同的是 通过构造函数来创建时 ("\\.")=var reg /\./;
console.log(reg.test("sfsf"));//这里为true . 仍然发挥的是任意字符的作用。
// 下面演示单词边界 检查字符串中是否含有单词child
reg = /child/;
console.log(reg.test("hello children"));//输出true 而事实上这个不是child 我们需要让child作为一个独立的单词
reg = /\bchild\b/;
console.log(reg.test("hello children"));
console.log(reg.test("hello child !!!hello"));//只有这里作为独立单词出现 输出true
console.log(reg.test("hello enchild "));
var strr = " he llo ";
//如何取除字符串的饿空格? 替换为空串!“”
console.log(strr);
strr = strr.replace(/\s/g, "");
console.log(strr);//这里是把包含的所有空格都去掉了但是我们最好是去字符串前后的空格 字符串中间夹的空格不要去除
strr = " he llo ";
console.log(strr);
strr = strr.replace(/^\s*|\s*$/g, "");//去除开头和结尾的若干空格 而不去掉字符串中间夹的空格
console.log(strr);
</script>
四、正则有关函数方法:
<title></title>
<script type="text/javascript">
var str = "1a2b3c4d5e6f";
//split()把字符串拆分为数组 支持正则表达式
var result = str.split("c");
console.log(result.length);
console.log(result);
//但是上面这个拆分不够灵活 下面根据任意字母拆分字符串
//可以在方法中传递一个正则表达式作为参数来拆分字符串
result = str.split(/[A-z]/);
console.log(result);//split方法是默认对全局生效的。。
//search ()搜索字符串中是否含有指定内容/与正则表达式匹配的内容
str = "hello mqy 123 aec pzk afc";
result = str.search("aec");//找到则返回第一个索引 找不到则返回-1
console.log(result);
result = str.search(/a[bef]c/);
console.log(result);
//match()可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
//默认情况下match只会找到第一个符合要求的内容 找到以后就停止检索
//若设置正则表达式为全局匹配模式 则会匹配到所有符合要求的内容
str = "1a2b3c4d5Ce6Df7AG8H";
result = str.match(/[a-z]/gi);
console.log(result);
console.log(typeof result);
console.log(Array.isArray(result));
//match会将匹配到的内容封装到一个数组中返回 即使只查询到一个结果
console.log(result[0]);console.log(result[2]);
//replace()——可以将字符串中的指定内容替换成新的内容。
result = str.replace();//传入第一个参数被替换内容,第二个参数新替换的内容、
//同样的原来的不变 返回一个改变后的新内容!!默认只替换第一个 若想都替换则用正则表达式开全局匹配
result = str.replace("a","@-@");
console.log(result);
result = str.replace(/a|c/gi,"@@");
console.log(result);
</script>
附:邮件的正则 选择性掌握
<title></title>
<script type="text/javascript">
/*电子邮件的格式:
xxx任意字母数字下划线开头 (.任意字母数字下划线) @ 任意字母数字 . 任意字母(2-5位) .任意字母(2-5位 可选)
\w{3,} (\.\w+)* @ [A-z0-9]+ (\.[A-z]{2,5}){1,2}
*/
var emaiReg =/^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/;
var email = "abc.hello@163.com.cn";
console.log(emaiReg.test(email));
</script>
总结
以上就是今天要讲的内容——正则,本文仅仅简单介绍了如何使用,平时在笔试面试中正则的使用较少,一般在做处理字符串算法中会涉及,但是在实际工作中合理地使用往往能起到事半功倍的效果。