那些年我遇到过的正则表达式
正则感觉用得少,至少对于我来说,虽然系统性的学习过,可是,老了,还是容易忘,所以打算以后把我遇到过的都整理在此,以作自己巩固参考。
1.把"kl$100.08"转成100.08
这个就是从一个字符串中截取浮点数。
console.log("kl$100.08".replace(/[^{(0-9),{.}}]/ig,"")); // 100.08
例子实验:
// 1).过滤出一个字符串中的数字
var string1 = '#@1.309$';
//把所有不是数字不是.也不是$的字符替换成空字符串
//i : ignore g: global
var str1 = string1.replace(/[^\d,^{.},^{$}]/ig, '');
var str1_1 = string1.replace(/[^\d,{.},{$}]/ig, '');
console.log(str1); // 1.309$
console.log(str1_1); // 1.309$
var str1_11 = string1.replace(/[^{\d,{.},{$}}]/ig,''); // 这个算是标准写法把!!!
console.log(str1_11); // 1.309$
//把所有数字和.替换成字母t
var str1_2 = string1.replace(/[\d,{.}]/ig,'t');
console.log(str1_2); //#@ttttt$
//2).找到第一个出现数字的位置
var string2 = 'fdjk@1.23efj';
console.log(string2.search(/\d/)); // 5
//3).三个数字连着的
var string3 = 'tyd35h345fsa';
var str3 = string3.match(/\d\d\d/g);
console.log(str3); //["345"]
//4).若干个数字
var string4 = 'hs5624mf734f32f5dd0';
var str4 = string4.match(/\d+/g);
console.log(str4); // ["5624", "734", "32", "5", "0"]
//5).除了大写字母和数字以外的
var string5 = '#jTyhT$T78s0s';
var str5 = string5.replace(/[^\d,^A-Z]/g,'Q');
console.log(str5); // QQTQQTQT78Q0Q
//6).除了小写字母和数字以外的
var string6 = '#jTyhT$T78s0s';
var str6 = string6.replace(/[^a-z,^\d]/g,'H');
console.log(str6); // HjHyhHHH78s0s
2.两个特别的字符: '^' 和 ‘$'
在项目中遇到了下面这段代码,硬是看了半天没看懂正则到底说的啥,结果发现自己把^理解成‘非’的含义了。
后来网上查了一下才知道,'^' 和 ‘$' 他们是分别用来匹配字符串的开始和结束,以下分别举例说明:
"^The": 匹配以 "The"开头的字符串;
"of despair$": 匹配以 "of despair" 结尾的字符串;
"^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配
"notice": 匹配包含notice的字符串
遇到的代码:
1 function getStatus(name) { 2 var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); 3 var r = window.location.search.substr(1).match(reg); 4 if (r !== null) return unescape(r[2]); 5 return null; 6 };
所以,现在也就能理解了,其中的var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");是用来获取页面url的某个url参数的方法。
(^|&)这个是匹配以&开头或前面没有字符的内容。([^&]*)表示不包含&的任意个字符。(&|$)表示以&结尾或者后面没有字符的内容。
这个正则是寻找 & + url参数名字 = 值 + &; &可以不存在。
var r = window.location.search.substr(1).match(reg);
if (r !== null) return unescape(r[2]);
return null;
这里是开始匹配,找到了返回对应url值,没找到返回null.
例子实验:
//7).^ 和 $ 分别用来匹配字符串的开头和结束
// ^匹配开头,注意与‘非’区分开
var testStr1 = 'mabcde123';
var testStr2 = 'abcde123';
var testStr3 = '12ab34cd';
//匹配以ab字符串开头的字符串,如果匹配到了就返回字符串构成的数组,没匹配到就返回null
console.log(testStr1.match(/(^ab)/g)); // null
//把以字符串m开头的字符替换成M
console.log(testStr1.replace(/(^m)/g,'M')); // Mabcde123
//把不是字符m的所有字符替换成M
console.log(testStr1.replace(/[^{m,c}]/g,'M')); // mMMcMMMMM
//把不是字符m的所有字符替换成M
console.log(testStr1.replace(/[^m,^c]/g,'M')); // mMMcMMMMM
//把所有不是小写字母的字符替换成6
console.log(testStr1.replace(/[^a-z]/g,'6')); // mabcde666
//把以小写字母开头的字符替换成6
console.log(testStr1.replace(/^[a-z]/g,'6')); // 6abcde123
//匹配以ab字符串开头的字符串,如果匹配到了就返回字符串构成的数组,没匹配到就返回null
console.log(testStr2.match(/(^ab)/g)); // ["ab"]
//把所有非数字字符替换成T
console.log(testStr3.replace(/[^\d]/g,'T')); // 12TT34TT
//把所有非数字字符替换成T
console.log(testStr3.replace(/[^0-9]/g,'T')); //12TT34TT
//把以数字开始的字符替换成T
console.log(testStr3.replace(/^[\d]/g,'T')); // T2ab34cd
//把以数字开始的字符替换成T
console.log(testStr3.replace(/^[0-9]/g, 'T')); //T2ab34cd