JavaScript 正则表达式
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。 搜索模式可用于文本搜索和文本替换。
基本语法
用法一: /正则表达式主体/修饰符(可选) var regexp = /is/i; 用法二: new RegExp(正则表达式主体,修饰符); var regexp = new RegExp('is', 'g');
正则常用方法
search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。 "Visit Runoob!".search("Runoob"); // 6 replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 'this is name'.replace(/\bis\b/g, 'IS'); // this IS name test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。 /http.*\.jpg/.test('https://www.dingsky.com/wcs/Upload/202004/5ea1b65abbadb.jpg'); // true exec() 方法用于检索字符串中的正则表达式的匹配。该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。 /\bis\b/g.exec('this is name'); // 'is' match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。 '(8000,1)(8001,0)(8002,0)'.match(/(\d+,\d+)/g); // ["8000,1", "8001,0", "8002,0"]
正则元字符
1、单词边界(\b) 'this is name'.replace(/is\b/g, 'IS') 2、任意字符(.) 'this is name'.replace(/th.s/g, 'This') 3、任意数量(*) 'this is name'.replace(/t.*s/g, 'This') // .* 匹配任意多个任意字符 4、转义字符(\) var str = 'http://dinghui.hsyc518.com/images/dinghui.jpg' /http.*\.jpg/.test(str) // /.是将'.'进行了转义,使其识别为掉点符号 5、匹配数字(\d) 'abcd68sd'.replace(/\d\d/, 'ID'); 6、量词 ? 出现零次或一次(最多出现一次) + 出现一次或多次(至少出现一次) * 出现零次或多次(任意次) {n} 出现n次 {n,m} 出现n到m次 {n,} 至少出现n次 /\d{4}/.test('abcd1234def'); //匹配连续4个数字 /b{2}/.test('abbcd1234def'); //匹配连续2个'b' /\d{2,10}/; //匹配连续出现2到10个数字 7、或([+-]) 'a+csda-asd+d'.replace(/a[+-]/g, 'ID'); 匹配'a+'或者'a-' 8、开头(^)、结尾($) ^ 以什么开头,写在匹配字符的前面 $ 以什么结尾,写在匹配字符的后面 /^\d{4}[-,/]\d{2}[-,/]\d{2}$/.test('2016/02/12') 9、修饰符(g、i) g: 全文搜索,如果不加g就查到第一个停止 i: 忽略大小写,默认大小写敏感 m: 多行搜索 ('He is a boy. Is he').replace(/\bis\b/gi, 'IS') (`@123 @345 @678`).replace(/^@\d/gm, 'X') //换行符也是字符,如果想匹配多行,可使用修饰符'm' 10、构造函数正则 var reg = new RegExp('\\bis\\b', 'g'); ('He is a boy. Is he').replace(reg, 'IS') 11、元字符 原义文本字符: 表示本来意义的字符串字符 元字符:在正则表达式中有特殊含义的非字母字符 元字符: *+?$^.|\(){}[] 文本元字符: \t 水平制表符 \v 垂直制表符 \n 换行符 \r 回车符 \0 空字符 \f 换页符 \cX 与X对应的控制字符(Ctrl+X) 12、字符类 一般情况下正则表达式一个字符对应字符串一个字符 正向字符类类: 'a1b2c3d4'.replace(/[abc]/g, 'X') 匹配a||b||c 字符类取反(^): 'a1b2c3d4'.replace(/[^abc]/g, 'X') 匹配不是a或b或c的字符 13、范围类 [a-z] 匹配从a到z的任意字符 'abcd123ADda'.replace(/[a-z]/g, '0') [a-zA-Z0-9] 组合范围类 14、预定义类 . [^\r\n] 除了回车符和换行符之外的所有字符 \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] 非单词字符 \b 单词边界 \B 非单词边界 15、贪婪模式、非贪婪模式 贪婪模式:尽可能多的匹配 '123456789'.replace(/\d{3,6}/, 'X') 非贪婪模式:尽可能少的匹配 '123456789'.replace(/\d{3,6}?/, 'X') 16、分组 使用()可以达到分组的功能,使量词作用于分组 (dinghui){3} // 匹配'dinghui'字符串连续出现3次的 17、反向引用 '2015-12-21'.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$3/$2/$1') // "21/12/2015" 忽略分组:在括号里面加?: '2015-12-21'.replace(/(?:\d{4})-(\d{2})-(\d{2})/g, '$3/$2/$1') 18、前瞻 正则表达式从文本头部向尾部开始解析,文本尾部方向称为“前” 前瞻就是正则比倒是匹配到规则的时候,向前检查是否符合断言 正向前瞻 exp(?=assert) /\w(?=\d)/ 匹配\w的字符,且尾部为数字 负向前瞻 exp(?!assert) /\w(?!\d)/ 匹配\w的字符,且尾部不为数字 js不支持后顾
随缘而来,乘风而去,山高海阔,自有我风采!
所属分类:
JavaScript