^
^
字符有两种含义,对应不同的语境。
① 表示字符集合的非:
示例:将 url 的查询参数解析成字典对象
参考文章:2016十家公司前端面试小记
function getQueryObject(url) {
url = url == null ? window.location.href : url;
var search = url.substring(url.lastIndexOf("?") + 1);
var obj = {};
var reg = /([^?&=]+)=([^?&=]*)/g;
search.replace(reg, function (rs, $1, $2) {
var name = decodeURIComponent($1);
var val = decodeURIComponent($2);
val = String(val);
obj[name] = val;
return rs;
});
return obj;
}
来看一下这个正则表达式的演化:
[^?&=]
表示要匹配的字符不是?
也不是&
也不是等于号=
,除了这仨,其他字符都可以。^
字符在[]
里面表示 “非” 的意思。[^?&=]+
后面紧跟着一个加号+
,表示前面的字符至少出现一个,也可以是多个。([^?&=]+)
用圆括号包起来,表示要记住这个字符串了,后面可能会引用匹配到的实际字符串。([^?&=]+)=
紧跟着要有一个等于号。([^?&=]+)=([^?&=]*)
URL查询字符串,等号后面的值是可以为空的,因此用*
来进行匹配,表示 除了?&=
之外的字符可以重复出现零次或多次。
② 表示一段字符串以什么开头
示例:匹配数字,其精度不超过小数点后两位,如 20.09
是合法的,但是 20.900
是不合法的。
// TODO
var reg = /^[1-9]((?:[0-9]*)(?:\.[0-9]{1,2})?)$/gm;
var numbers = [2.1, 2.12, 2.123, 2.12];
numbers.forEach( function(item) {
console.log(reg.test(String(item)));
});