正则表达式

// 一、正则表达式生成
// 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: '
’.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、匹配标签: "aaahello" .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);

你可能感兴趣的:(正则表达式)