// 一、正则表达式生成
// 1、调用regExp对象的构造函数 new RegExp('', 'gim') 转义字符需要两个 如\\.
// 2、使用正则表达式字面值,将匹配模式封闭在两个斜杠中 /^()[]\d\w$/gim
// 二、正则的组成
// 1、元字符
// 字符匹配:. \w \W \d \D \s \S
// 位置匹配: \b \B ^ $ (?=p) (?!p)
// 2、标志字符
// m、g、i
// 3、限定符
// * + ? {m} {m,} {m,n}
// 4、转义字符
// * + ? | \ / { [ ( ) ] }^ $ . 这些字符匹配本身需要转义
// 三、正则的相关方法
// test exec search match replace split
// 四、正则匹配模式
// 精确匹配
// /hello/.test(‘hello’);
// 模糊匹配
// “123 1234 12345 123456”.match(/\d{2,5}/g); //[“123”, “1234”, “12345”, “12345”] “a0b a1b a2b a3b a4b”.match(/a[123]b/g); // [“a1b”, “a2b”, “a3b”]
// 排除字符 'baby,back,bad,good'.match(/\b([^b,]\w+)\b/g)
// 分支匹配(分支结构是惰性的,即当前面的匹配上了,后面的就不再尝试了 )'beacher'.match(/beach|beacher/g); //beach
// 分组匹配(使用括号来提供分组功能 ) ”ab abb abab".match(/(ab)+/g); //["ab", "ab", "abab"]
// 分组引 "2017-06-12".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1")
// 反向应用(可以在正则本身里引用分组。但只能引用之前出现的分组,即反向引用 )var a = “2017-06-12”;var b = “2017/06/12”;var c = “2017.06.12”;/\d{4}(-|\/|\.)\d{2}\1\d{2}/.test(a);
// 位置匹配
// “hello”.replace(/^|$/g, ‘#’); // #hello# “hello”.replace(/\b/, ‘#’); //#hello “hello”.replace(/(?=l)/g, ‘#’) //he#l#lo “hello”.replace(/(?!l)/g, ‘#’) //#h#ell#o#
// 贪婪模式'a123bbb'.match(/a.*b/g); //["a123bbb"]'123456'.match(/\d+/g); //["123456"]
// 非贪婪模式(在限定符后面直接加上一个问号?就是非贪婪模式)'a123bbb'.match(/a.*?b/g); //["a123b"]'123456'.match(/\d+?/g); //["1", "2", "3", "4", "5", "6"]
// 捕获分组(以小括号()来实现,捕获性分组工作模式()会把每个分组里匹配的值保存起来) /([a-z]+)(\d+)/.exec('a133'); // ["a133", "a", "133", index: 0, input: "a133”]
// 非捕获分组(分组(?:)会作为匹配校验,并出现在匹配结果字符里面,但不作为子匹配返回) /(?:[a-z]+)(?:\d+)/.exec('a133'); // ["a133", index: 0, input: "a133”]
// 五、常用正则
// 1、匹配汉字:^[\u4e00-\u9fa5]{0,}$2、 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$3、日期格式:^\d{4}-\d{1,2}-\d{1,2}
// 4、时间:/^(0?[0-9]|1[0-9]|[2][0-3]):(0?[0-9]|[1-5][0-9])$/ 5、一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$6、一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$7、中国邮政编码:[1-9]\d{5}(?!\d)8、IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
// 9、匹配id: '<div id="container" class="main"></div>’.match(/id="[^"]*"/ );
// 10、格式化货币:function format (num) { return num.toFixed(2).replace(/\B(?=(\d{3})+\b)/, ",").replace(/^/, "$$ "); };
// 11、去掉左右空格: ' javascript '.replace(/^\s+|\s+$/g, '');
// 12、每个单词的首字母转换为大写 : function format(str) { return str.toLowerCase().replace(/(?:^|\s)\w/g, function (c) { return c.toUpperCase(); }); }
// 13、匹配标签: "aaa<title>hello</title>" .match(/<([^>]+)>[\d\D]*<\/\1>/)
// 14、身份证号码:/^(\d{15}|\d{17}[\dxX])$/
// 六、正则原理:回溯
// let reg1 = /javascript/.test('hello,javascript');
// console.log(reg1);
// let reg2 = /(a and )?(b and )?c/.exec('a and b and c');
// console.log(reg2);
// let reg3 = 'hellojavascript'.search(/script/);
// console.log(reg3);
// let reg3 = 'a and b and c'.match(/(a and )?(b and )?c/)[5];
// console.log(reg3);
// let reg4 = 'hello world'.replace(/(\w+)\s(\w+)/,'$2 $1');
// console.log(reg4);
// let reg5 = '111hello world222'.replace(/([a-z|A-Z]+)\s[a-z|A-Z]+/,"--$`$'$&$$$1--");
// console.log(reg5);
// let reg6 = '111hello world222'.replace(/([a-z|A-Z]+)\s[a-z|A-Z]+/, function (match, p1, offset, string) {
// console.log(match, 'match');
// console.log(p1, 'p1');
// console.log(offset, 'offset');
// console.log(string, 'string');
// return match;
// });
// console.log(reg6);
// let reg7 = 'hello world'.split(/(\sw)/);
// console.log(reg7);
// let reg8 = 'hello world'.split(/(\sw)/);
// console.log(reg8);
// let reg9 = '2010-01-01'.match(/\d{4}([-/\.])\d{2}\1\d{2}/);
// console.log(reg9);
正则表达式
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 温馨提示:文章很长很长,保持耐心,必要时可以跳着看,当然用来查也是不错的。 正则啊,就像一座灯塔,当你在字符串的海...
- 常用参数: \d:匹配数字\w:匹配单词字符,字母、数字下划线\s:匹配空格[a-zA-Z0-9]:匹配a-z、A...
- 最简单的匹配模式就是,直接输入你想匹配的东西。 比如我想匹配 a,在模式里就可以输入一个 a 。要匹配大写的 A ...
- 一、什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否...