详细js 正则的解释
g 代表全局匹配
m 代表可以进行多行匹配
i 代表不区分大小写匹配
^ 匹配输入字符串的开始位置
0…$9 属性。
(?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern)正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
匹配2-4个汉字
匹配6到18个(字母,数字,下划线)字符
匹配HTML标签
匹配左右两端的空格
优先级顺序(从高到低)
\ 转义符
(),(?:),(?=),[] 圆括号和方括号
* , + , ? , {n} , {n,} , {n,m} 限定符
^ , [vapour:content]nbsp; 位置和顺序
| "或"操作
匹配两个连续的以空格分开的相同单词
在这个示例中,子表达式就是圆括号之间的每一项。
所捕获的表达式包括一个或多个字母字符,即由'[a-z]+' 所指定的。
该正则表达式的第二部分是对前面所捕获的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词。
'\1'用来指定第一个子匹配。单词边界元字符确保只检测单独的单词。
如果不这样,则诸如 "is issued" 或 "this is" 这样的短语都会被该表达式不正确地识别。
var re = /\b([a-z]+) \1\b/gim;
var rv = ss.replace(re,"$1");
document.write(rv) //输出 "Is the cost of gasoline going up?. Is the cost of gasoline going up?. "
匹配单词 'Chapter' 的前三个字符,因为它们出现在单词边界后
匹配单词 'Chapter' 中的 'ter',因为它出现在单词边界之前
匹配 'apt',因为它位于 'Chapter' 中间,但不会匹配 'aptitude' 中的'apt',因为它位于单词边界后
*/
匹配URL地址
将下述的URI 分解为协议 (ftp, http, etc),域名地址以及页面/路径:
http://msdn.microsoft.com:80/scripting/default.htm
第一个附加子表达式是用来捕获该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括 '^'、 '/' 或 ':' 字符的任何字符序列。第三个附加子表达式捕获网站端口号码,如果指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后,第四个附加子表达式捕获由该 web 地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除'#' 或空格之外的字符。
将该正则表达式应用于上面所示的 URI 后,子匹配包含下述内容:
RegExp.2 包含 "msdn.microsoft.com"
RegExp.4 包含 "/scripting/default.htm"
正则表达式的方法
1 test方法
返回一个Boolean值,它指出在被查找的字符串中是否存在模式
rgExp.test(str)
全局RegExp对象的属性不由test方法来修改
example1
var reg=/(\w+):\/\/([^\/:]+)(:\d*)?([^#]*)/;
var flag=reg.test(url);
flag //返回true
RegExp.2 //返回"msdn.microsoft.com"
RegExp.egExp.$4 //返回"/scripting/default.html"
search和test方法都不能更新全局RegExp对象,所以RegExp.input,RegExp.index,RegExp.lastIndex返回undefined
2 match 方法
使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回
如果match方法没有找到匹配,返回null。如果找到匹配返回一个数组并且更新全局RegExp对象的属性以反映匹配结果。
match方法返回的数组有三个属性:input、index和lastIndex。
Input属性包含整个的被查找的字符串。
Index属性包含了在整个被查找字符串中匹配的子字符串的位置。
LastIndex属性包含了最后一次匹配中最后一个字符的下一个位置。
如果没有设置全局标志(g),数组的0元素包含整个匹配,而第1到n元素包含了匹配中曾出现过的任一个子匹配。
这相当于没有设置全局标志的exec方法。如果设置了全局标志,元素0到n中包含所有匹配
example1(没有设置全局标志)
var reg=/(\w+):\/\/([^\/:]+)(:\d*)?([^#]*)/;
var myArray=url.match(reg);
RegExp.2 //返回"msdn.microsoft.com"
RegExp.egExp.$4 //返回"/scripting/default.html"
myArray //返回myArray[0]="http://msdn.microsoft.com:80/scripting/default.html",
myArray[1]="http",myArray[2]="msdn.microsoft.com",
myArray[3]=":80",myArray[4]="/scripting/default.html"
myArray.input //返回“http://msdn.microsoft.com:80/scripting/default.html"
myArray.index //返回0
myArray.lastIndex //返回51
example2(设置了全局标志)
var reg=/(\w+):\/\/([^\/:]+)(:\d*)?([^#]*)/g;
var myArray=url.match(reg);
RegExp.2 //返回"msdn.microsoft.com"
RegExp.egExp.$4 //返回"/scripting/default.html"
myArray //返回myArray="http://msdn.microsoft.com:80/scripting/default.html"
myArray.input //返回“http://msdn.microsoft.com:80/scripting/default.html"
myArray.index //返回0
myArray.lastIndex //返回51
注意设置了全局标志后区别
如果没有设置全局标志(g),数组的0元素包含整个匹配,而第1到n元素包含了匹配中曾出现过的任一个子匹配。
这相当于没有设置全局标志的exec方法。如果设置了全局标志,元素0到n中包含所有匹配
3 exex方法
用正则表达式模式在字符串运行查找,并返回包含该查找结果的一个数组。
如果exec方法没有找到匹配,则它返回null。
如果它找到匹配,则exec方法返回一个数组,并且更新全局RegExp对象的属性,以反映匹配结果。
数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。
这相当于没有设置全局标志(g)的match方法。
如果为正则表达式设置了全局标志,exec从以lastIndex的值指示的位置开始查找。
如果没有设置全局标志,exec忽略lastIndex的值,从字符串的起始位置开始搜索。
exec方法返回的数组 有三个属性,分别是input、index、lastIndex。
Input属性包含了整个被查找的字符串。
Index属性中包含了整个被查找字符串中被匹配的子字符串的位置。
LastIndex属性中包含了匹配中最后 一个字符的下一个位置。
example1(没有设置全局标志)
var reg=/(\w+):\/\/([^\/:]+)(:\d*)?([^#]*)/;
var myArray=reg.exec(url);
RegExp.2 //返回"msdn.microsoft.com"
RegExp.egExp.$4 //返回"/scripting/default.html"
myArray //返回myArray[0]="http://msdn.microsoft.com:80/scripting/default.html",
myArray[1]="http",myArray[2]="msdn.microsoft.com",
myArray[3]=":80",myArray[4]="/scripting/default.html"
myArray.input //返回“http://msdn.microsoft.com:80/scripting/default.html"
myArray.index //返回0
myArray.lastIndex //返回51
没有设置全局标志(g)时,match方法和exec方法相同
example2(设置全局标志)
var reg=/(\w+):\/\/([^\/:]+)(:\d*)?([^#]*)/;
var myArray=reg.exec(url);
RegExp.2 //返回"msdn.microsoft.com"
RegExp.egExp.$4 //返回"/scripting/default.html"
myArray //返回myArray[0]="http://msdn.microsoft.com:80/scripting/default.html",
myArray[1]="http",myArray[2]="msdn.microsoft.com",
myArray[3]=":80",myArray[4]="/scripting/default.html"
myArray.input //返回“http://msdn.microsoft.com:80/scripting/default.html"
myArray.index //返回0
myArray.lastIndex //返回51
4 search方法
返回与正则表达式查找内容匹配的第一个子字符串的位置。
search方法指明是否存在相应的匹配 。
如果找到一个匹配,search方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。
如果没有找到匹配,则返回-1。
example1
var reg=/(\w+):\/\/([^\/:]+)(:\d*)?([^#]*)/;
var flag=url.search(reg);
flag //返回0
RegExp.2 //返回"msdn.microsoft.com"
RegExp.egExp.$4 //返回"/scripting/default.html"
search和test方法都不能更新全局RegExp对象,所以RegExp.input,RegExp.index,RegExp.lastIndex返回undefined
5 replace方法
返回根据正则表达式进行文字替换后的字符串的复制
能更新全局RegExp对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!