那些年我遇到过的正则表达式

正则感觉用得少,至少对于我来说,虽然系统性的学习过,可是,老了,还是容易忘,所以打算以后把我遇到过的都整理在此,以作自己巩固参考。

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(/ddd/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

原文地址:https://www.cnblogs.com/xiayu25/p/6398328.html