JS常用正则表达式大全、
正则表达式完整视频https://pan.baidu.com/s/1IgYS8oGBrRgZQropPUTnoA 提取码:nbx3正则相关函数的用法总结https://pan.baidu.com/s/1Rvqr-5UI7NxoxArdgxyRhg 提取码:08yj
正则表达式(Regular Expression)是一个描述字符模式的对象。
java正则表达式用法。字符模式是由一系列字符构成的特殊格式的字符串,由普通字符和元字符组成。
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符 |
\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"]
在这正则表达式中,方括号表示字符范围。在方括号中可以包含多个字符,表示匹配其中任意一个字符。
如果多个字符的编码顺序是连续的,可以仅指定开头和结尾字符,省略中间字符,仅使用连字符~表示。
如果在方括号内添加 脱字符^ 前缀,还可以表示 范围之外的字符。
例如:
示例一:混用各种字符模式
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;
使用竖线“ | ” 描述,表示两个子模式的匹配结果中任选一个。
匹配任意数字或字母:
var s1 = "abc";
var s2 = "123";
var r = /\w+|\d+/; // 选择重复字符类
var b1 = r.test(s1); // 返回true
var b2 = r.test(s2); // 返回true
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 的序列的字符串 |
首先定义一个字符串直接量:
var s = "ggle gogle google gooogle goooogle gooooogle goooooogle gooooooogle goooooooogle";
var r = /go?gle/g; // 匹配前一项字符o0次或1次
var a = s.match(r); // 返回数组["ggle", "gogle"]
var r = /go{0,1}gle/g; // 匹配前一项字符o0次或1次
var a = s.match(r); // 返回数组["ggle", "gogle"]
var r = /go{3}gle/g; // 匹配前一项字符o重复显示3次
var a = s.match(r); // 返回数组["gooogle"]
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"]
var r = /go*gle/g; // 匹配所有的单词
var a = s.match(r); // 返回数组["ggle", "gogle", "google", "gooogle", "goooogle", "gooooogle", "goooooogle", "goooooooogle", "gooooooooogle"]
var r = /go{0,}gle/g; // 匹配所有的单词
var a = s.match(r); // 同上
var r = /go+gle/g; // 匹配的单词中字符"o"至少出现1次
var a = s.match(r); // 返回数组["gogle", "google", "gooogle", "goooogle", "gooooogle", "goooooogle", "goooooooogle", "gooooooooogle"]
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>”
方法:在重复类量词后面添加英文问号(?)后缀
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,}?。 |
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态