JavaScript正则表达式浅析及常用代码

JavaScript正则表达式

正则表达式简述

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。ECMAScript的RegExp对象表示正则表达式,而String 和RegExp 都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。

正则表达式修饰符

参数       含义                           备注i       忽略大小写g       全局匹配m       多行匹配u       正确处理四个字节的UTF-16编码       ES6新增y       确保匹配必须从剩余的第一个位置开始   ES6新增

正则表达式创建

创建正则表达式和创建字符串类似,创建正则表达式提供了两种方法,一种是采用new
运算符,另一个是采用字面量方式。

var xzavier = new RegExp('xzavier');       //第一个参数字符串var xzavier = new RegExp('xzavier', 'ig'); //第二个参数可选修饰符var xzavier = /xzavier/;                   //直接用两个反斜杠var xzavier = /xzavier/ig;                 //第二个斜杠后面加上的是修饰符

正则表达式方法

RegExp 对象的test() 方法在字符串中查找是否存在指定的正则表达式并返回布尔值,如果存在则返回true,不存在则返回false。

var pattern = new RegExp('xzavier', 'i');  //正则模式,不区分大小写var pattern1 = /xzavier/i; //创建正则模式,不区分大小写var str = 'This is Xzavier!'; console.log(pattern.test(str));  //trueconsole.log(pattern1.test(str));  //trueconsole.log(/xzavier/i.test(str));  //true

RegExp 对象的exec()方法也用于在字符串中查找指定正则表达式,如果exec()方法执行成
功,则返回包含该查找字符串的相关信息数组。如果执行失败,则返回null。

var pattern = new RegExp('xzavier', 'i'); var pattern1 = /xzavier/i; var str = 'This is Xzavier!'; console.log(pattern.exec(str));  //["Xzavier"]console.log(pattern1.exec(str));  //["Xzavier"]console.log(/xzavier1/i.exec(str));  //null

String 对象也提供了4 个使用正则表达式的方法。
match(pattern) 返回pattern中的匹配的字符串或null:

var pattern = /xzavier/ig;   //全局匹配var str = 'This is Xzavier, this is Xzavier too.'; console.log(str.match(pattern));  //["Xzavier", "Xzavier"]console.log(str.match(pattern).length);  //2console.log('javascript'.match(/xzavier/ig));  //null

replace(pattern, replacement) 用replacement替换pattern:

var pattern = /xzavier/ig;  var str = 'This is Xzavier, this is Xzavier too.'; console.log(str.replace(pattern, 'JavaScript'));  //This is JavaScript, this is JavaScript too.

search(pattern) 返回字符串中pattern开始位置,查找到返回位置,否则返回-1:

var pattern = /xzavier/i;  var str = 'This is Xzavier, this is Xzavier too.'; var str1 = 'This is JavaScript, this is JavaScript too.'; console.log(str.search(pattern));   //8console.log(str1.search(pattern));   //-1

split(pattern) 返回字符串按指定pattern 拆分的数组:

var pattern = / /ig;  var str = 'This is Xzavier, this is Xzavier too.'; console.log(str.split(pattern));   //["This", "is", "Xzavier,", "this", "is", "Xzavier", "too."]

RegExp对象的静态属性

属性              短名      含义input             $_    当前被匹配的字符串lastMatch         $&    最后一个匹配字符串lastParen         $+    最后一对圆括号内的匹配子串leftContext       $`    最后一次匹配前的子串rightContext      $'    在上次匹配之后的子串var pattern = /(x)zavier/;var str = 'This is xzavier!';pattern.test(str); console.log(RegExp.input); //This is xzavier!console.log(RegExp.leftContext); //This is console.log(RegExp.rightContext); //!console.log(RegExp.lastMatch); //xzavierconsole.log(RegExp.lastParen); //x

RegExp对象的实例属性

属性                   含义global       Boolean值,表示g是否已设置ignoreCase   Boolean 值,表示i 是否已设置lastIndex    整数,代表下次匹配将从哪里字符位置开始multiline    Boolean值,表示m是否已设置Source       正则表达式的源字符串形式var pattern = /xzavier/ig;console.log(pattern.global); //true,是否设置了全局console.log(pattern.ignoreCase); //true,是否设置了忽略大小写console.log(pattern.multiline); //false,是否设置了换行console.log(pattern.lastIndex); //0,下次匹配位置console.log(pattern.source); //xzavier,正则表达式的源字符串

正则表达式元字符

字符类:单个字符和数字

字符类:空白字符

字符类:锚字符

字符类:重复字符

字符类:替代字符

字符类:记录字符

贪婪模式和惰性模式

贪婪  惰性'+'   +??     ??\*    *?{n}   {n}?{n,}  {n,}?{n,m} {n,m}?var pattern = /[a-z]+/; //贪婪匹配,全部替换var str = 'qqqwwweee';var result = str.replace(pattern, 'xxx');console.log(result);  //xxxvar pattern = /[a-z]+?/; //?号关闭了贪婪匹配,只替换了第一个var str = 'qqqwwweee';var result = str.replace(pattern, 'xxx');console.log(result);  //xxxqqwwweee

前瞻捕获

正向前瞻 x(?=y),找到x后面紧跟着y的位置,如果找到则匹配这个位置

var pattern = /(xza(?=vier))/; //xza后面必须跟着vier才能捕获var str = 'hello,xzavier';console.log(pattern.test(str));  //true

逆向前瞻 x(?!y),找到x后面不是y的位置,如果找到则匹配这个位置

var pattern = /(xza(?!vier))/; //xza后面必须跟着的不是vier才能捕获var str = 'hello,xzaqqqvier';console.log(pattern.test(str));  //true

捕获性分组和非捕获性分组

捕获性分组

var pattern = /(\d+)([a-z])/; //捕获性分组var str = '123abc';console.log(pattern.exec(str));  //["123a", "123", "a"]

非捕获性分组 格式: (?:x)

var pattern = /(\d+)(?:[a-z])/; //非捕获性分组var str = '123abc';console.log(pattern.exec(str));  //["123a", "123"]

常用正则表达式

亲测有效:

匹配中文字符: [\u4e00-\u9fa5]
匹配Email地址:\w[-\w.+]@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}/
去除首尾空白:/(^\s
)|(\s*$)/g
去除多余空格:/\s/g
身份证:\d{17}[\d|x]|\d{15}
ip地址:\d+.\d+.\d+.\d+
网址URL: ^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+
QQ号:[1-9]{4,}

延伸阅读:正则表达式的扩展

关键字:JavaScript

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部