JavaScriipt正则表达式

本文深入解析正则表达式的强大功能,涵盖基本语法、元字符、量词、分组及高级特性,助您掌握高效字符串处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是正则表达式

  1. 正则表达式是一个强大的字符串处理工具

正则的用途

  1. 进行特定的字符和字符串的搜索
  2. 替换字符串中特定的字符或字符串
  3. 验证字符串是否符合需求 
<script>
		var str="qw123jl43llfa789dg498lfds";
		let re=/\d+/g 
		// \d表示查找字符类型为数字,+表示量词为一次以上,g表示全局查找
		alert(str.match(re));
	</script>

正则的写法

  1. 字面量          let re1 = /\d+/g     类似于数组,优点简单方便
  2. 构造函数      let re2 =new RegExp('正则表达式','gim')。 类似于数组,优点支持变量

 


正则表达式元字符(正则表达式中有特殊含义的字符)

元字符

.匹配除了换行和特殊空白符之外的字符
\w匹配数字、字母、下划线。
\W匹配除数字、字母、下划线。
\d匹配数字
\D匹配数字以外的字符
\s匹配空白字符
\S匹配空白字符之外的字符
\b匹配单词边界          / \bis/g      is单词,而不是is字母
\B匹配非单词边界
\n匹配换行符
\r匹配回车符
\t匹配制表符
g全局匹配
i不区分大小写
m多行匹配,就是字符串的换行符直接识别为换行,而不是换行符。相当于新的开始

 

 

 

 

量词

量词
+至少匹配一次,最多不限
匹配0到1次
*至少匹配0次,最多不限
{ n}匹配n次
{n,}至少匹配n次,最多不限
{n,m}最少匹配n次,最多匹配m次

 

只能影响前面的一个字符或者一个小括号的内容

贪婪模式(默认模式):{3,8}会按照8来查找,就是按照最多的来查找;

非贪婪模式(在量词后面加问号):{3,8}?的形式。这样他就会按照最少的次数匹配。当前是3.

范围匹配

[asdf]匹配asdf这四个字符中的任意一个字符
[0-9]匹配0到9的任意一个数字
[a-z]匹配任意一个小写字母
[A-Z]匹配任意一个大写字母
[A-z]匹配所有字母中的任意一个
[\u4e00-\u9fa5]匹配汉字
[0-9-]匹配横线在范围类之后加
<script>
		var str="safsdgfasffafadadsgfhafsgd";
		// 匹配单个字符串
		let re1=/afs/g 
		// 匹配以a开头的三个字符
		let re2=/a[A-z]{2}/g
		// []表示匹配标准为全体字母
		alert(str.match(re2));
	</script>

分组

分组是正则中非常常见且重要的概念

  1. 使用()对正则表达式进行分组,每个()为一个子组。
  2. 每个子组都是一个子正则表达式
  3. 通过分组,可以改变量词的影响范围。  /[a-z]\d+/与/([a-z]\d)+/结果完全不同

量词默认只影响前面一个字符或一个小括号内的内容。

['f1f2f23']    //第一是一个字母加一个数字,第二个是一个字母加数字,第三个是一个字母加多个数字

let re = /([a-z]\d){2,}[a-z]/;

分组会自动捕获。如。'2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2$3$1');则变成:12252015。$1=2015(第一个分组),$2=12(第二个分组),$3=25(第三个分组)。

忽略分组:即用到分组,但又不想捕获分组。在分组内加?: 如'2015-12-25'.replace(/(?:\d{4})-(\d{2})-(\d{2})/g。怎$1=12(第二个分组括号)

前瞻

前瞻就是找到当前目标字符串后再匹配他的儿子是否符合要求。

  1. 正向前瞻:exp(?=assert)。如/ \w(?=\d)/   \w是要匹配的目标字符串,(?=\d)他后面的需要是数字。
  2. 负向前瞻:exp(?!assert)。如/ \w(?=\d)/   \w是要匹配的目标字符串,(?!\d)他后面的不是数字。

位置限制

  1. 开始位置     let re=/^\d/
  2. 结束位置     let re=/\d$/

对象属性

var reg1=/\w/;

var reg2=/\w/g;

  1. global:是否全文检索,默认false   如\g
  2. ignore case:是否大小写敏感,默认false   如\i
  3. multiline:多行搜索,默认false   如\m
  4. lastIndex:是当前表达式匹配内容的最后一个字符的下一个位置。下一次搜索的开始位置。reg2.lastIndex会存在执行反复,他的test()方法会存在false的情况。因为他在lastIndex的值是变动的,执行到最后的字符后则会重置。非全局不生效。
  5. index:开始匹配文本的初始位置
  6. source:正则表达式的文本字符串

字符串的匹配方法

  1. search(正则表达式或者字符串):检查字符串是否有目标字符串,有则返回第一个匹配结果的index,没有返回-1.不支持\g,都是从字符串开始检索。
  2. match:没有\g标记时,只对字符串做一次匹配,没找到返回null。有的话就返回一个相关信息的数组,其中有index和子表达式的文本。如果有\g则是返回匹配的结果数组,没有lastIndex了。
  3. split():字符串转换数组。'a,b,c,d'.split(/\d/g)=["a","b","c","d"]
  4. replace('查找的字符串',"替换成的字符串");替换成的字符串也可以是一个有返回值的函数。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值