JavaScript 正则表达式(二十四)

什么是正则表达式?

  • 正则表达式是由一个字符序列形成的搜索模式

  • 当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容

  • 正则表达式可以是一个简单的字符,或一个更复杂的模式

  • 正则表达式可用于所有文本搜索和文本替换的操作

正则表达式的特点

  1. 灵活性、逻辑性和功能性非常的强
  2. 可以迅速地用极简单的方式达到字符串的复杂控制
  3. 对于刚接触的人来说,比较晦涩难懂
  4. 实际开发,一般都是直接复制写好的正则表达式. 但是要求会使用正则表达式并且根据实际情况修改正则表达式

字符

字符等价类含义
.[^\n\r]除了回车符和换行符之外的所有字符
\d[0-9]数字字符
\D[^0-9]非数字字符
\s[ \t\n\x0B\f\r]空白符
\S[^ \t\n\x0B\f\r]非空白符
\w[a-zA-Z_0-9]单词字符(字母、数字、下划线)
\W[^a-zA-Z_0-9]非单词字符
字符匹配
{n,m}匹配前一项至少n次,但不能超过m次
{n,}匹配前一项n次或更多次
{n}匹配前一项n次
匹配前一项0次或者1次,也就是说前一项是可选的,等价于{0,1}
匹配前一项1次或多次,等价于{1,}
*匹配前一项0次或多次,等价于{0,}
元字符/元符号匹配
$匹配字符串的结尾,在多行检索中,匹配一行的结尾
^匹配字符串的开头,在多行检索中,匹配一行的开头
\A只有匹配字符串开始处
\b匹配单词边界,词在 []内时无效
\B匹配非单词边界
\G匹配当前搜索的开始位置
\Z匹配字符串结束处或行尾
\z只匹配字符串结束处

修饰符

在正则表达式的第二条斜线之后,可以指定一个或多个修饰符,/pattern/g

常用修饰符:

  • i 执行不区分大小写的匹配。
  • g 全局匹配。
  • m 多行匹配模式。
  • y “粘连”(sticky)修饰符。y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。
  • s 表示点(.)可以表示任意字符,不设置的话,四个字节的 UTF-16 字符和行终止符不能用 . 表示。
  • u 开启 “Unicode 模式”,用来正确处理大于 \uFFFF 的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。

正则表达式的创建

在 JavaScript 中,可以通过两种方式创建一个正则表达式。

方式一:通过调用RegExp对象的构造函数创建

<script type="text/javascript">
		var E = new RegExp(/123/);
		console.log(E); //输出  /123/
</script>

image.png

方式二:利用字面量创建 正则表达式

<script type="text/javascript">
		var exe = /123/; 
		console.log(exe)//输出 /123/
</script>

image.png

测试正则表达式

test() 正则对象方法,用于检测字符串是否符合该规则,该对象会返回 true 或 false,其参数是测试字符串

<script type="text/javascript">
		var exe = /123/; 
		console.log(exe.test(123));//匹配字符中是否出现123  出现结果为true
		console.log(exe.test('abc'));//匹配字符中是否出现123 未出现结果为false
		console.log(exe.test('123abc'));匹配字符中是否出现123  出现结果为true
</script>

image.png

image.png

正则方法

split()

用于把一个字符串分割成字符串数组。传递一个正则表达式作为参数,使这个方法根据正则表达式进行拆分.不使用全局匹配依然全部拆分

<script type="text/javascript">
		var str = "1a2b3c4d5e6f7g"
		var ret = str.split(/[a-z]/)
		console.log(ret)
</script>

image.png

replace()

用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
参数1:被替换的内容
参数2:新内容
注意:如果不进行全局匹配只替换第一个

<script type="text/javascript">
		var str = "1a2b3c4d5e6f7g"
		var result = str.replace(/b|e/g,",")
		console.log(result)
</script>

image.png

search()

方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

<script type="text/javascript">
		var str = "1a2b3c4d5e6f7g"
		var ret1 = str.search(/[6-9]/)
		console.log(ret1)
</script>

image.png

边界符

正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符

边界符说明
^表示匹配行首的文本(以谁开始)
$表示匹配行尾的文本(以谁结束)

如果 ^和 $ 在一起,那么必须是精确匹配

<script type="text/javascript">
		var R = /abc/; 
		// /abc/ 只要包含有abc这个字符串返回的都是true
		console.log(R.test('abc'));
		console.log(R.test('abcd'));
		console.log(R.test('aabcd'));
		
</script>

image.png

<script type="text/javascript">
			var R = /^abc/; //^必须是以a开头
			console.log(R.test('abc')); // true
			console.log(R.test('abcd')); // true
			console.log(R.test('cbcd')); // false
</script>

image.png

<script type="text/javascript">
			var reg1 = /^abc$/;
			// 精确匹配 必须是 abc字符串才可以
			console.log(reg1.test('abc')); // true
			console.log(reg1.test('abcd')); // false
			console.log(reg1.test('abcde')); // false
			console.log(reg1.test('abcdef')); // false
</script>

image.png

[] 方括号

**表示有一系列字符可供选择,只要匹配其中一个就可以了** 只要字符中有匹配方括号其中的一个,就返回 true 

方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 。区别于边界符 ^ ,必须在方括号内部才是取反
<script type="text/javascript">
			var R = /[abc]/; 
			// 只要包含有a 或者 b 或者 c 都返回为true
			console.log(R.test('meta'));//true
			console.log(R.test('body'));//true
			console.log(R.test('head'));//true
			console.log(R.test('html'));//false
		</script>

image.png

<script type="text/javascript">
			var R = /^[abc]$/;
			// 三选一 只有是a 或者 b  或者c 这三个字母返回 true
			console.log(R.test('a'));//true
			console.log(R.test('b'));//true
			console.log(R.test('c'));//true
			console.log(R.test('d'));//false
			console.log(R.test('e'));//false
		</script>

image.png

<script type="text/javascript">
			var R = /^[a-z]$/ 
			//26个英文字母任何一个字母返回 true 表示是a到z的范围 (小写字母) 
			console.log(R.test('a'));//true
			console.log(R.test('b'));//true
			console.log(R.test('y'));//true
			console.log(R.test('W'));//false
			console.log(R.test('D'));//false
		</script>

image.png

<script type="text/javascript">
			// 26个英文字母(大写和小写都可以)任何一个字母返回 true  
			//0-9数字也可,但必须是单个
			var R = /^[a-zA-Z0-9]$/; 
			console.log(R.test('a'))//true
			console.log(R.test('A'))//true
			console.log(R.test(0))//true
			console.log(R.test('aa'))//false
			console.log(R.test('AA'))//false
			console.log(R.test(99))//false
		</script>

image.png

<script type="text/javascript">
			// 只要不是26个英文字母任何一个字母返回 true  
			//数字也返回false
			var R = /^[^a-zA-Z0-9]$/; 
			console.log(R.test('aa'))//false
			console.log(R.test('bb'))//false
			console.log(R.test('!'))//true
			console.log(R.test(' '))//true
			console.log(R.test('888'))//false
		</script>

image.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

David凉宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值