博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则表达式入门及实例
阅读量:5282 次
发布时间:2019-06-14

本文共 2942 字,大约阅读时间需要 9 分钟。

什么是正则表达式

在常见的字符串检索或者替换中,我们需要提供一种模式表示检索或者匹配的规则。正则表达式就是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

创建正则表达式的2种方式及区别

使用构造函数

var regObj = new RegExp("\d{1,6}“,"g");

使用RegExp构造函数,他接收2个参数,一个是要匹配的字符串模式,一个是可选的标志字符串。需要注意的是传给RegExp构造函数的2个参数都是字符串。正则表达式的匹配模式支持下列3个标志

  1. g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止。
  2. i:表示不区分大小写(case-insensitive)模式, 即在确定匹配项时忽略匹配模式与字符串的大小写。
  3. m: 表示多行( multiline )模式,即在达到一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项。

使用字面量语法

var regObj = /\d{1,6}/g;

注意事项

  • 模式中所有元字符必须进行转义,正则表达式中元字符包括( [ {  ^ $ | ) ? * + .]},这些元字符在正则表达式中都有一种或者多种特殊用途。
var pattern4 = /.at/gi;     //匹配所有以 "at"  结尾的 3个字符的组合,不区分大小写。     var pattern4 = /\.at/gi;   //匹配所包含.at模式的字符串
  • 不要把正则表达式字面量直接传给构造函数。
  • 如果构造函数模式含有元字符,则需要对元字符进行双重转义(eg:字符\在字符串中通常被转义为\,而在正则表达式字符串就会变成\\)。例如字面量模式/[bc]at/和字符串模式"\[bc\]at"是等价的。

字符说明

常用字符

\d : 匹配任意一个数字,0~9 中的任意一个

\s : 匹配任意一个空白字符
\b : 匹配一个单词边界,不匹配任何字符
\w : 匹配任意一个字符( 字母、 数字、下划线 ) . : 匹配任意一个字符,除了换行符( \n )
\n : 查找换行符
\u : 通常用来匹配汉字
表达式 "\d","\s","\b","\w",对应的大写字母表示相反的意义 如:\D 匹配所有的非数字字符

方括号:

[abc] : 查找方括号之间的任何字符。

[^abc] : 查找任何不在方括号之间的字符。
[0-9] : 查找任何从 0 至 9 的数字。
[a-z] : 查找任何从小写 a 到小写 z 的字符。
[A-Z] : 查找任何从大写 A 到大写 Z的字符。

量词:

n+ : 匹配任何包含至少一个 n 的字符串。

n? : 匹配任何包含零个或一个 n 的字符串。
n* : 匹配任何包含零个或多个 n 的字符串。
n{X} : 匹配包含 X 个 n 的序列的字符串。
n{X,Y} : 匹配包含 X 到Y 个 n 的序列的字符串。
^n : 匹配任何开头为 n 的字符串。
n$ : 匹配任何结尾为 n 的字符串。

()、[]、{} 的区别

() 的作用是提取匹配的字符串。表达式中有几个()就会得到几个相应的匹配字符串。比如 (\s+) 表示连续空格的字符串。

[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示字符文本要匹配英文字符和数字。
{}一般用来表示匹配的长度,比如 \d{3} 表示匹配三个空格,\d[1,3]表示匹配1~3个空格。

^ 和 $

^ 匹配一个字符串的开头,比如 (^a) 就是匹配以字母a开头的字符串

$ 匹配一个字符串的结尾,比如 (b$) 就是匹配以字母b结尾的字符串
^ 还有另个一个作用就是取反,比如[^xyz] 表示匹配的字符串不包含xyz
需要注意的是:如果^出现在[]中一般表示取反,而出现在其他地方则是匹配字符串的开头

RegExp实例常用方法

  • test() 检索字符串中指定的值,返回值为true或者false。
  • exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。
  • compile()用于改变RegExp,既可以改变检索模式,也可以添加或删除第二个参数。
  • toString() 返回正则表达式的字符串表示形式

String类型与正则相关的方法

  • search():检索与正则表达式相匹配的值 用法:str.search(reg); (返回索引值,无-1)
"abcabcdef".search(/(abc)\1/);    //0
  • match():返回所有正则表达式的匹配(加g) 用法:str.match(reg); (返回数组)
"abbbccbb".match(/b+/g)   //["bbb", "bb"]
  • replace():替换与正则表达式匹配的子串 用法:str.replace(reg,"");
"abcabcdef".replace(/b+?/,"x");    //"axcabcdef""abcabcdef".replace(/b+?/g,"x");    //"axcaxcdef"
  • split:将字符串匹配的部分做分割(去除) 用法:str.split(reg); (返回数组)
"abbbccbb".split(/b+/g)   //["a", "cc", ""]

应用例子

  1. 校验上传app的版本号,要求格式为X.X.X,其中X代表数字。
var pattern = /\d+\.\d+\.\d+/;        if (!pattern.test($scope.version)) {            madpFactory.layerMsg({                "CN": "版本号格式不正确。",                "EN": "The format of version number is wrong."            }, 0);            flg = false;        }
  1. 将后台返回模板中“【】”替换为当前登录店铺的用户名。
piece.replayContent = data.data.generateContent;  var pattern = new RegExp("【】");   if (pattern.test(piece.replayContent)) {  piece.replayContent = piece.replayContent.replace(/【】/g,  $scope.shopName.value                                                       }

3.校验手机号

let  pattern = /^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(166)|(147))\d{8}$/

转载于:https://www.cnblogs.com/JessicaIsEvolving/p/9051842.html

你可能感兴趣的文章
前端面试题(4)iframe有哪些优点?iframe缺点是什么?
查看>>
第十六章 多态性(一)
查看>>
INSERT IGNORE INTO / REPLACE INTO
查看>>
Python数据类型-布尔/数字/字符串/列表/元组/字典/集合
查看>>
MFC中theApp
查看>>
类的无参方法
查看>>
Python 开发:初识Python(记笔记)
查看>>
sqlrelay 的安装配置和应用
查看>>
【刷题】SPOJ 705 SUBST1 - New Distinct Substrings
查看>>
IEEE 754浮点数表示标准
查看>>
WebService客户端几种实现方式
查看>>
Lua1.1 Lua 的参考手册 (二)
查看>>
linux下mysql的root密码忘记解决方
查看>>
javascript学习笔记 - 引用类型 单体内置对象
查看>>
LeetCode-Pascal's Triangle II-帕斯卡三角-DP
查看>>
boot空间不足
查看>>
第五周学习进度条
查看>>
提出的问题
查看>>
使用kdesvn提交文件出现Aborting commit:'.lcd1602.ko.cmd' remains in conflict错误提示
查看>>
解决Jenkins无法编译Egret5.0项目的问题
查看>>