JS:正则表达式详细语法基础

 2023-09-11 阅读 18 评论 0

摘要:正则表达式一、字符描述支持的边界元字符二、字符范围2.1示例三、选择操作3.1 基本选择模式3.2 多重选择模式四、重复类量词4.1重复类量词示例五、惰性模式5.1定义惰性匹配 JS常用正则表达式大全、 正则表达式完整视频https://pan.baidu.com/s/1IgYS8oGBrRgZQropPUTnoA 提取码

正则表达式

  • 一、字符描述
    • 支持的边界元字符
  • 二、字符范围
    • 2.1示例
  • 三、选择操作
    • 3.1 基本选择模式
    • 3.2 多重选择模式
  • 四、重复类量词
    • 4.1重复类量词示例
  • 五、惰性模式
      • 5.1定义惰性匹配

JS常用正则表达式大全、

 正则表达式完整视频https://pan.baidu.com/s/1IgYS8oGBrRgZQropPUTnoA 提取码:nbx3正则相关函数的用法总结https://pan.baidu.com/s/1Rvqr-5UI7NxoxArdgxyRhg 提取码:08yj

正则表达式(Regular Expression)是一个描述字符模式的对象。

一、字符描述

java正则表达式用法。字符模式是由一系列字符构成的特殊格式的字符串,由普通字符元字符组成。

  • 普通字符:仅能够描述自身,如A ~ Z、a ~ z、0 ~ 9。
  •  元 字 符 :拥有特殊含义的字符,一般需要加反斜杠进行标识,以便对原字符进行转义。
元字符描述
.查找单个字符,除了换行和行结束符
\w查找单词字符。匹配0-9、a-z、A-Z、_ 的数字或字符,相当于[0-9a-zA-Z _]
\W查找非单词字符
\d查找数字
\D查找非数字字符。
\s查找空白字符。
\S查找非空白字符。
\b查找位于单词的开头或结尾的匹配。
\B查找不处在单词的开头或结尾的匹配。
\0查找 NUL 字符。
\n查找换行符。
\f查找换页符。
\r查找回车符。
\t查找制表符。
\v查找垂直制表符。
\xxx查找以八进制数 xxx 规定的字符。
\xdd查找以十六进制数 dd 规定的字符。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。

tip:表示字符的方法有多种,除了可以直接使用字符本身,也可以ASCII码或Unicode编码

示例一:ASCII码直接量定义正则表达式

/*a的ASCII码为97,被转换为十六进制数值后为61,若要匹配a,则应在前面添加“\x”前缀,以提示它为ASCII码 */
var r = /\x61/;		// 以ASCII编码(16进制)匹配字母a//a的ASCII码八进制为141
var r = /\141/;var s = "javascript";
var a = s.match(r);

示例二:双斜杠构造法定义正则表达式

var r = new RegExp("\\u0061");

支持的边界元字符

元字符描述
^匹配开头,在多行检测中,会匹配一行的开头
$匹配结尾,在多行检测中,会匹配一行的结尾

匹配文本行中最后一个单词
var r = /(?:\w+)$/;//返回["you"]

匹配文本行中开头一个单词
var r = /^(?:\w+)/;//返回["how"]

二、字符范围

在这正则表达式中,方括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。

如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符~表示。
如果在方括号内添加 脱字符^ 前缀,还可以表示 范围之外的字符

例如:

  • [abc]:查找方括号内任意一个字符。
  • [ ^abc]:查找不在方括号内的字符。
  • [0-9]:查找从 0 至 9 范围内的数字,即查找数字。
  • [a-z]:查找从小写 a 到小写 z 范围内的字符,即查找小写字母。
  • [A-Z]:查找从大写 A 到大写 Z范围内的字符,即查找大写字母。
  • [A-z]:查找从大写 A 到小写 z 范围内的字符,即所有大小写的字母。

2.1示例

示例一:混用各种字符模式

var s = "abcdez";
var r = /[abce-z]/g;    //字符串类包含a、b、c,以及e~z之间的任意字符
var a = s.match(r);     //返回数组["a", "b", "c", "e", "z"]

示例二:字符类内部不要有空格,否则也会对空格进行匹配

var r = /[0-9 ]/g;  

示例三:匹配任意大小写字母和数字:

var r = /[a-zA-Z0-9]/g;

示例四:字符范围组合使用

var s = "abc4 abd6 abe3 abf1 abg7";	// 字符串直接量
var r = /ab[c-g][1-7]/g; // 匹配第一、二个字符为ab,第三个字符为从c到g,第四个字符为1~7的任意数字
var a = s.match(r);// 返回数组["abc4"," abd6"," abe3"," abf1"," abg7"]

示例五:匹配除数字以外任意字符

var r = /[ ^0123456789]/g;

三、选择操作

使用竖线“ | ” 描述,表示两个子模式的匹配结果中任选一个。

3.1 基本选择模式

匹配任意数字或字母:

var s1 = "abc";
var s2 = "123";
var r = /\w+|\d+/;			// 选择重复字符类
var b1 = r.test(s1); 		// 返回true
var b2 = r.test(s2); 		// 返回true

3.2 多重选择模式

var s1 = "abc";
var s2 = "efg";
var s3 = "123";
var s4 = "456";
var r = /(abc)|(efg)|(123)|(456)/; 	// 多重选择匹配:多个子模式之间加上选择操作符|
var b1 = r.test(s1); 					// 返回true
var b2 = r.test(s2); 					// 返回true
var b3 = r.test(s3); 					// 返回true
var b4 = r.test(s4); 					// 返回true

四、重复类量词

在正则表达式语法中,定义了一组重复类量词,如表所示。
它们定义了重复匹配字符的确数或约数

量词描述
n+匹配任何包含至少一个 n 的字符串
n*匹配任何包含零个或多个 n 的字符串
n?匹配任何包含零个或一个 n 的字符串
n{x}匹配包含 x 个 n 的序列的字符串
n{x,y}匹配包含最少 x 个、最多 y 个 n 的序列的字符串
n{x,}匹配包含至少 x 个 n 的序列的字符串

4.1重复类量词示例

首先定义一个字符串直接量:

var s = "ggle gogle google gooogle goooogle gooooogle goooooogle gooooooogle goooooooogle";

  • 如果仅匹配单词ggle和gogle:
  1. 方法一:
var r = /go?gle/g; 			// 匹配前一项字符o0次或1次
var a = s.match(r); 		// 返回数组["ggle", "gogle"]
  1. 方法二:
var r = /go{0,1}gle/g; 	// 匹配前一项字符o0次或1次
var a = s.match(r); 		// 返回数组["ggle", "gogle"]



  • 如果仅匹配第四个单词gooogle:
  1. 方法一
var r = /go{3}gle/g; 		// 匹配前一项字符o重复显示3次
var a = s.match(r); 		// 返回数组["gooogle"]
  1. 方法二:
var r = /gooogle/g; 		// 匹配字符gooogle
var a = s.match(r); 		// 返回数组["gooogle"]



  • 如果希望匹配第四个~第六个之间的单词:
var r = /go{3,5}gle/g; 	// 匹配第四个到第六个之间的单词
var a = s.match(r); // 返回数组["gooogle", "goooogle", "gooooogle"]



  • 如果希望匹配所有单词:
  1. 方法一:
var r = /go*gle/g; 	// 匹配所有的单词
var a = s.match(r); // 返回数组["ggle", "gogle", "google", "gooogle", "goooogle", "gooooogle", "goooooogle", "goooooooogle", "gooooooooogle"]
  1. 方法二:
var r = /go{0,}gle/g; 		// 匹配所有的单词
var a = s.match(r); // 同上



  • 如果希望匹配包含字符"o"的所有单词:
  1. 方法一:
var r = /go+gle/g; 			// 匹配的单词中字符"o"至少出现1次
var a = s.match(r); // 返回数组["gogle", "google", "gooogle", "goooogle", "gooooogle", "goooooogle", "goooooooogle", "gooooooooogle"]
  1. 方法二:
var r = /go{1,}gle/g;	 	// 匹配的单词中字符"o"至少出现1次
var a = s.match(r); // 返回数组["gogle", "google", "gooogle", "goooogle", "gooooogle", "goooooogle", "goooooooogle", "gooooooooogle"]

五、惰性模式

重复类量词都具有贪婪性,在条件允许的前提下,会匹配尽可能多的字符。

?、{n} 和 {n,m} 重复类具有弱贪婪性,表现为贪婪的有限性

*、+ 和 {n,} 重复类具有强贪婪性,表现为贪婪的无限性


贪婪匹配和惰性匹配都遵循的原则:保证匹配满足模式所定义的各种限定条件。



示例一:贪婪匹配
越是排在左侧的重复类量词匹配优先级越高。
下面示例显示当多个重复类量词同时满足条件时,会在保证右侧重复类量词最低匹配次数基础上,使最左侧的重复类量词尽可能占有所有字符

var s = "<html><head><title></title></head><body></body></html>";
var r = /(<.*>)(<.*>)/
var a = s.match(r);
console.log(a[1]);  //左侧表达式匹配"<html><head><title></title></head><body></body></html>"
console.log(a[2]);  //右侧表达式匹配“</html>”

5.1定义惰性匹配

方法:在重复类量词后面添加英文问号(?)后缀


var s ="<html><head><title></title></head><body></body></html>";
var r = /<.*?>/
var a = s.match(r); 			// 返回单元素数组["<html>"]

针对 6 种重复类惰性匹配的简单描述如下:

模式说明
{n,m}?尽量匹配 n 次,但是为了满足限定条件也可能最多重复 m 次。
{n}?尽量匹配 n 次。
{n,}?尽量匹配 n 次,但是为了满足限定条件也可能匹配任意次。
??尽量匹配,但是为了满足限定条件也可能最多匹配 1 次,相当于 {0,1}?。
+?尽量匹配 1 次,但是为了满足限定条件也可能匹配任意次,相当于 {1,}?。
*?尽量不匹配,但是为了满足限定条件也可能匹配任意次,相当于 {0,}?。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/48864.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息