正则表达式RegExp语法与用法详解

目录
  • 正则表达式的定义和用途
  • 创建正则表达式
    • 方式一:使用构造函数创建
    • 方式二:使用字面量创建
  • 正则表达式的语法
    • 匹配字符
    • 简写
    • 模式修正符
    • 贪婪匹配
    • 断言
  • 正则表达式的使用
    • 搜索第一个符合条件的字符串 search()
    • 搜索所有符合条件的字符串 match()
    • 字符串拆分成数组 split()
    • 字符串替换 replace()
      • 过滤HTML标签
      • 去除空格
  • 常用正则表达式
  • 总结

正则表达式的定义和用途

正则表达式用于定义一些字符串的规则。计算机可以根据正则表达式,来检查一个字符串是否符合指定的规则,或者将字符串中符合规则的内容提取出来。

RegExp的意思是 Regular expression。使用typeof检查正则对象,会返回object。

创建正则表达式

方式一:使用构造函数创建

使用构造函数创建时,更加灵活,因为参数中还可以传递变量。

	var 变量 = new RegExp("正则表达式"); // 注意,参数是字符串
	var 变量 = new RegExp("正则表达式", "匹配模式"); // 注意,两个参数都是字符串

匹配模式作为第二个参数。这个参数可以是:

  • i 忽略大小写。这里的 i 指的是 ignore。
  • g 全局匹配模式。这里的 g 指的是 global。
var reg = new RegExp("a"); // 定义一个正则表达式:检查一个字符串中是否含有 a

var reg = new RegExp('A', 'i');
var str = 'qiangu';

console.log(reg.test(str)); // 打印结果:true

方式二:使用字面量创建

	var 变量 = /正则表达式/;  // 注意,这个语法里没有引号

	var 变量 = /正则表达式/匹配模式;  // 注意,这个语法里没有引号
	var reg = /A/i; // 定义正则表达式的规则:检查一个字符串中是否含有 a。忽略大小写。
	var str = "qiangu";

	console.log(typeof reg);  // 打印结果:object
	console.log(reg.test(str)); // 打印结果:true

正则表达式的语法

匹配字符

字符 描述
. 匹配任意单个字符除了换行符
[ ] [ ] 内为字符集,匹配 [ ] 内任一字符
[^ ] 匹配除了方括号里的任意字符
* 匹配 >= 0 个 * 号前的字符。
+ 匹配 >= 1 个+号前的字符。
? 匹配 0 或 1 个 ?号前的字符。
{n,m} 匹配n到m个大括号之前的字符或字符集
(xyz) 匹配与 xyz 完全相等的字符串
| 或运算符,匹配|符号前或后的字符
\s 匹配空格
\ 转义字符,匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ |
^ 从开始行开始匹配
$ 从末端开始匹配
  • /[ab]/ 等价于 /a|b/:检查一个字符串中是否包含 a或b
  • /[a-z]/:检查一个字符串那种是否包含任意小写字母
  • /[A-Z]/:任意大写字母
  • /[A-z]/:任意字母
  • /[0-9]/:任意数字
  • /a[bde]c/:检查一个字符串中是否包含 abc 或 adc 或 aec
  • [Tt]he 匹配 the 和 The
  • [^c]ar 匹配一个后面跟着ar的除了c的任意字符,如匹配par,不匹配car
  • [a-z]* 匹配一个行中所有以小写字母开头的字符串。
"[a-z]*" => The car parked in the garage

c.+t 匹配以首字母c开头以t结尾,中间跟着至少一个字符的字符串

"c.+t" => The fat cat sat on the mat
  • [T]?he 匹配字符串 he 和 The
  • [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的数字
  • 可以省略第二个参数。 例如,[0-9]{2,} 匹配至少两位 0~9 的数字。
  • 逗号也省略掉则表示重复固定的次数。 例如,[0-9]{3} 匹配3位数字
  • (c|g|p)ar 匹配 car 或 gar 或 par
  • "(f|c|m)at\.?" => The fat cat sat on the mat.
  • "(T|t)he" => The car is parked in the garage.
  • "^(T|t)he" => The car is parked in the garage.

简写

简写 描述
\w 匹配所有字母数字,等同于 [a-zA-Z0-9_]
\W 匹配所有非字母数字,即符号,等同于: [^\w]
\d 匹配数字: [0-9]
\D 匹配非数字: [^\d]
\s 匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]
\S 匹配所有非空格字符: [^\s]
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符
\v 匹配一个垂直制表符
\p 匹配 CR/LF(等同于 \r\n),用来匹配 DOS 行终止符

模式修正符

标志 描述
i 忽略大小写。
g 全局搜索。
m 多行修饰符:锚点元字符 ^ $ 工作范围在每行的起始。
  • "/The/gi" => The fat cat sat on the mat.
  • "/.(at)/g" => The fat cat sat on the mat.
  • (^,$) 用于检查格式是否是在待检测字符串的开头或结尾。但我们如果想要它在每行的开头和结尾生效,我们需要用到多行修饰符 m。

贪婪匹配

正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。

"/(.*at)/" => The fat cat sat on the mat.

惰性匹配

使用 ? 将贪婪匹配模式转化为惰性匹配模式。

"/(.*?at)/" => The fat cat sat on the mat.

断言

符号 描述
?= 正先行断言-存在
?! 负先行断言-排除
?<= 正后发断言-存在
?<! 负后发断言-排除
  • 定义一个正先行断言要使用 ()。在括号内部使用一个问号和等号: (?=...)。正先行断言的内容写在括号中的等号后面。 例如,表达式 (T|t)he(?=\sfat) 匹配 The 和 the,在括号中我们又定义了正先行断言 (?=\sfat) ,即 The 和 the 后面紧跟着 (空格)fat。
"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
  • 负先行断言 ?! 用于筛选出其后不跟随断言中定义的格式。表达式 (T|t)he(?!\sfat) 匹配 The 和 the,且其后不跟着 (空格)fat。
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
  • 正后发断言 记作(?<=...) 用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。 例如,表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fat 和 mat,且其前跟着 The 或 the。
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
  • 负后发断言 记作 (?<!...) 用于筛选所有匹配结果,筛选条件为 其前不跟随着断言中定义的格式。 例如,表达式 (?<!(T|t)he\s)(cat) 匹配 cat,且其前不跟着 The 或 the。
"(?<!(T|t)he\s)(cat)" => The cat sat on cat.

正则表达式的使用

判断字符串是否符合规则 test()

符合则返回true,否则返回false。

  var reg = /[^ab]/; // 规则:字符串中,除了a、b之外,还有没有其他的字符内容?
  var str = "acb";

  console.log(reg.test(str)); // 打印结果:true
	var reg = /[^0-9]/;  // 规则:字符串中,除了数字之外,还有没有其他的内容?
	var str1 = "1991";
	var str2 = "199a1";

	console.log(reg.test(str1)); // 打印结果:false (如果字符串是 纯数字,则返回 false)
	console.log(reg.test(str2)); // 打印结果:true

搜索第一个符合条件的字符串 search()

search()【只会查找第一个】——搜索字符串中是否含有指定内容。如果搜索到指定内容,则会返回第一次出现的索引;否则返回-1。

	var str = "hello abc hello aec afc";
	// 搜索字符串中是否含有abc 或 aec 或 afc
	result = str.search(/a[bef]c/);
	console.log(result); // 打印结果:6

搜索所有符合条件的字符串 match()

从一个字符串中将符合条件的内容提取出来,封装到一个数组中返回(即使只查询到一个结果)。

默认情况下,match()方法只会找到第一个符合要求的内容,设置正则表达式为全局匹配模式,这样就会匹配到所有的内容,并以数组的形式返回。

可以为一个正则表达式设置多个匹配模式,且匹配模式的顺序无所谓。

	var str = "1a2a3a4a5e6f7A8B9C";

	var result1 = str.match(/[a-z]/);   // 找到符合要求的第一个内容,然后返回
	var result2 = str.match(/[a-z]/g);  // 设置为“全局匹配”模式,匹配字符串中 所有的小写字母
	var result3 = str.match(/[a-z]/gi); // 设置多个匹配模式,匹配字符串中 所有的字母(忽略大小写)

	console.log(result1); // 打印结果:["a"]
	console.log(result2); // 打印结果:["a", "a", "a", "a", "e", "f"]
	console.log(result3); // 打印结果:["a", "a", "a", "a", "e", "f", "A", "B", "C"]

字符串拆分成数组 split()

	var str = "1a2b3c4d5e6f7g";
	var result = str.split(/[A-z]/); // 参数是一个正则表达式:表示所有字母
	console.log(result); //  ["1", "2", "3", "4", "5", "6", "7", ""]

字符串替换 replace()

默认只会替换第一个,如果需要替换全部符合条件的内容,可以设置正则表达式为全局匹配模式。

let str1 = '2020/5/20'
console.log(str1.replace(/\//g,"-"));  //得到 2020-5-20

var str2 = "Today is fine day,today is fine day !!!"
console.log(str2.replace("today","tomorrow"));  //只能替换第一个today
console.log(str2.replace(/today/gi,"tomorrow")); //这里用到了正则,且为“全局匹配”模式,才能替换所有的today

过滤HTML标签

str.replace(/<.*?>/g, "") 

去除空格

	str = str.replace(/^\s*/, ""); //去除开头的空格

	str = str.replace(/\s*$/, ""); //去除结尾的空格

常用正则表达式

常用正则表达式大全

最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等

非零数字(只能输入数字,但值不能为0,可以是00,01等)

/^([0]{2}|0[1-9]|[1-9])\d*$/

验证保留两位小数的正整数或0

/^([1-9]\d*|0)(\.\d{1,2})?$/

验证手机号码,如13908653654

/^(1[3|5|7|8][0-9]{9})$/

验证固定号码,如010-86551122或01086551122

/^((0\d{2,3})[-]?)(\d{7,8})([-]?(\d{3,}))?$/

验证电话号码—手机号码或固定号码,如13908653654或010-86551122或01086551122

/(^(1[3|5|7|8][0-9]{9})$)|(^((0\d{2,3})[-]?)(\d{7,8})([-]?(\d{3,}))?$)/

验证一代身份证号码

/^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$/

验证二代身份证号码

/^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}[\dXx]$/

验证通用身份证号码

/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/

总结

到此这篇关于正则表达式RegExp语法与用法的文章就介绍到这了,更多相关正则表达式RegExp详解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 正则表达式(RegExp)判断文本框中是否包含特殊符号

    前言 有时,我们希望判断文本框中用户输入的字符是否含有特殊符号(*/#$@),就像用户注册时密码框的填写. demo 利用 RegExp 对象,能很优雅的实现以上需求: // even(文本框内容) function (even) { // 规则对象(flag) var flag = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<><>/?~!@#¥--&*()--|{}[]'::""'.,.? ]&

  • 浅谈JS正则表达式的RegExp对象和括号的使用

    RegExp对象的创建: 常规的正则表达式的创建可用直接量,即斜杠 "/" 括起来的字符.但在要求参数变化的环境下,RegExp()构造函数是更好的选择: var reg1 = /'\w+'/g; var reg2 = new RegExp('\'\\w+\'','g'); 对比两种创建方式,RegExp中的第一个参数为要创建的正则字符串,一方面注意,因为不是直接量的表示形式,因此不用斜杠" / "括起来了:而是字符串中必须要对引号" ' "和转

  • 详解JavaScript正则表达式之RegExp对象

    一.RegExp对象概述        RegExp对象表示正则表达式,RegExp是正则表达式的缩写,它是对字符串执行模式匹配的强大工具.RegExp对象用于规定在文本中检索的内容.当您检索某个文本时,可以使用一种模式来描述要检索的内容.RegExp就是这种模式.简单的模式可以是一个单独的字符:更复杂的模式包括了更多的字符,并可用于解析.格式检查.替换等. 正则表达式可以规定字符串中的检索位置,以及要检索的字符类型等. 二.创建RexExp对象 创建正则表达式和创建字符串类似,创建正则表达式有

  • MySQL中REGEXP正则表达式使用大全

    以前我要查找数据都是使用like后来发现mysql中也有正则表达式了并且感觉性能要好于like,下面我来给大家分享一下mysql REGEXP正则表达式使用详解,希望此方法对大家有帮助. MySQL采用Henry Spencer的正则表达式实施,其目标是符合POSIX 1003.2.请参见附录C:感谢.MySQL采用了扩展的版本,以支持在SQL语句中与REGEXP操作符一起使用的模式匹配操作.请参见3.3.4.7节,"模式匹配". 在本附录中,归纳了在MySQL中可用于REGEXP操作

  • JavaScript RegExp 正则表达式对象详细说明

    直接量语法 /pattern/attributes 创建 RegExp 对象的语法: 复制代码 代码如下: var obj=new RegExp(pattern,attributes); 事例1: 复制代码 代码如下: var pattern=/a/; document.write(pattern.exec("asdas")); 事例2: 复制代码 代码如下: var obj=new RegExp("a"); document.write(obj.exec(&quo

  • javascript RegExp对象(正则表达式)

    使用RegExp的显式构造函数,语法为:new RegExp("pattern"[,"flags"]). 使用RegExp的隐式构造函数,采用纯文本格式:/pattern/[flags]. pattern部分为要使用的正则表达式模式文本,是必须的.在第一种方式中,pattern部分以JavaScript字符串的形式存在,需要使用双引号或单引号括起来:在第二种方式中,pattern部分嵌套在两个"/"之间,不能使用引号. flags部分设置正则表达

  • 正则表达式RegExp语法与用法详解

    目录 正则表达式的定义和用途 创建正则表达式 方式一:使用构造函数创建 方式二:使用字面量创建 正则表达式的语法 匹配字符 简写 模式修正符 贪婪匹配 断言 正则表达式的使用 搜索第一个符合条件的字符串 search() 搜索所有符合条件的字符串 match() 字符串拆分成数组 split() 字符串替换 replace() 过滤HTML标签 去除空格 常用正则表达式 总结 正则表达式的定义和用途 正则表达式用于定义一些字符串的规则.计算机可以根据正则表达式,来检查一个字符串是否符合指定的规则

  • 关于正则表达式基本语法的应用详解(必看篇)

    1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束.例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等): "of despair$":表示所以以"of despair"结尾的字符串: "^abc$":表示开始和结尾都是"abc"的字符串--呵呵,只有&qu

  • OGNL表达式基本语法与用法详解

    一.OGNL中的#.%和$符号 #.%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分.在这里我们简单介绍它们的相应用途. 1.#符号的三种用法 1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀.实际上,#相当于ActionContext. getContext():#session.msg表达式相当于ActionContext.getContext().getSessi

  • Python正则表达式分组概念与用法详解

    本文实例讲述了Python正则表达式分组概念与用法.分享给大家供大家参考,具体如下: 正则表达式分组 分组就是用一对圆括号"()"括起来的正则表达式,匹配出的内容就表示一个分组.从正则表达式的左边开始看,看到的第一个左括号"("表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式. 分完组以后,要想获得某个分组的内容,直接使用group(num)和groups()函数去直接提取就行. 例如:提取代码中的超链

  • C#正则表达式之Regex类用法详解

    Regex 类表示不可变(只读)的正则表达式.它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类. 正则表达式基础概述 什么是正则表达式 在编写字符串的处理程序时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 通常,我们在使用WINDOWS查找文件时,会使用通配符(*和?).如果你想查找某个目录下的所有Word文档时,你就可以使用*.doc进行查找,在这里,*就被解释为任意字符串.和通配

  • 正则表达式grep用法详解

    语法:grep 选项 'word' filename -c:打印符合要求的行数 -i:不区分大小写 -n:在输出符合要求的行的同时显示行号 -v:打印不符合要求的行 -A:后跟一个数字n,表示打印符合要求的行以及下面n行 -B:后跟一个数字n,表示打印符合要求的行以及上面n行 -C:后跟一个数字n,表示打印符合要求的行以及上下各n行 -r:会把目录下所有的文件全部遍历 --color:把匹配到的关键词用红色标示 例子: 过滤出带有某个关键词的行并输出行号 grep -n 'root' 1.txt

  • 正则表达式中问号(?)的正确用法详解

    目录 1.直接跟随在子表达式后面 2.非贪婪匹配 3.非获取匹配 4.断言 参考资料: 正则表达式中“?”的用法大概有以下几种 1.直接跟随在子表达式后面 这种方式是最常用的用法,具体表示匹配前面的一次或者0次,类似于{0,1},如:abc(d)?可匹配abc和abcd 2.非贪婪匹配 关于贪婪和非贪婪,贪婪匹配的意思是,在同一个匹配项中,尽量匹配更多所搜索的字符,非贪婪则相反.正则匹配的默认模式是贪婪模式,当?号跟在如下限制符后面时,使用非贪婪模式(*,+,?,{n},{n,},{n,m})

  • Python正则表达式中group与groups的用法详解

    目录 1 .group函数 1.1 返回整个匹配结果 1.2 返回指定分组的匹配结果 1.3 处理没有匹配结果的情况 2. groups函数 3. group和groups的使用场景 在Python中,正则表达式的group和groups方法是非常有用的函数,用于处理匹配结果的分组信息.group方法是re.MatchObject类中的一个函数,用于返回匹配对象的整个匹配结果或特定的分组匹配结果.而groups方法同样是re.MatchObject类中的函数,它返回的是所有分组匹配结果组成的元组

  • JS中正则表达式全局匹配模式 /g用法详解

    本文章来详细介绍js中正则表达式的全局匹配模式 /g用法,代码如下: var str = "123#abc"; var re = /abc/ig; console.log(re.test(str)); //输出ture console.log(re.test(str)); //输出false console.log(re.test(str)); //输出ture console.log(re.test(str)); //输出false 在创建正则表达式对象时如果使用了"g&q

  • 正则表达式用法详解

    正则表达式之基本概念 在我们写页面时,往往需要对表单的数据比如账号.身份证号等进行验证,而最有效的.用的最多的便是使用正则表达式来验证.那什么是正则表达式呢? 正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串. 它的应用非常广泛,特别是在字符串处理方面.其常见的应用如下: 验证字符串,即验证给定的字符串或子字符串是否符合指定的特征,例如,验证是否是合法的邮件地址.验证是否是合法的HTTP地址等等. 查找字符串,从给定的文本当中查找符合指定特征

随机推荐