最近越来越感觉到正则表达式的强大,可以简化很多代码。并且正则表达式入门并不是很难。简单列一下JavaScript中使用正则表达式的一些方法。
var href =
'baidu.com?where=b5s&a=b';
var regObj =
/(\w+)=(\w+)/;
var regObj1 =
/(\w+)=(\w+)/g;
正则对象上的方法
1.regObj.test();
返回true或false
regObj.test(href);//
true
2.regObj.exec();
每运行一次返回一组结果。如果是非全局搜索,每次运行都返回第一组结果。全局搜索,每次返回一组结果,是在上一次匹配的位置后开始匹配的。regObj的lastIndex属性会修改。当你对一个字符串进行搜索时,如果用它去搜索新的字符串,lastIndex会先设置为0。再切回来又会从0开始。匹配不到返回null,且将lastIndex属性设为0;每组的结果是一个数组,注意这个虽然是数组,但它是包含键值对属性的,可以打印下它的的length看看。[ ‘where=b5s’, ‘where’, ‘b5s’, index: 10, input: ‘baidu.com?where=b5s&a=b’ ];分别是[‘整个正则中匹配的字符’,’第一正则分组匹配的字符’,’第二正则分组匹配的字符’,index:’匹配处的起始位置’,input:’整个原始字符串’];
console.
log(regObj1.
exec(href));
//[
'where=b5s',
'where',
'b5s',
index:
10, input:
'baidu.com?where=b5s&a=b' ]
console.
log(regObj1.lastIndex);
//19
console.
log(regObj1.
exec(href));
//[
'a=b',
'a',
'b',
index:
20, input:
'baidu.com?where=b5s&a=b' ]
字符串方法
1.search
返回第一组匹配的索引。
href.search(regObj1);
href.search(
'a');
href.search(
'abcd');
2.match
返回匹配的值的数组或null。
href.match(
'123');
//null
href.match(regObj1);
//[
'where=b5s',
'a=b' ]
3.split
将字符串分割成数组。中间的分隔符也可以用正则表达式。用在可能有多种分割符的情况
var splitRegObj =
/&|\?/;
//以&或?分割
href.split(splitRegObj);
//[
'baidu.com',
'where=b5s',
'a=b' ];
4.replace
直接正则替换。
var res = href.replace(
/a|c/,
'aaaa');
var res = href.replace(
/a|c/g,
'aaaa');
var res = href.replace(
/(a|c)/g,
'$1-$1');
传入函数替换。
var res = href.replace(regObj1,
function(){
return 123
});
它的replace传入的函数的每个参数的值分别是:每次匹配的字符串;正则第一分组匹配;正则第二分组匹配;……正则第N分组匹配;匹配的初始位置;原始输入值。
var res = href.replace(regObj1,
function(match,$
1,$
2,index,input){
console.log(arguments);
//{
'0':
'where=b5s',
'1':
'where',
'2':
'b5s',
'3':
10,
'4':
'baidu.com?where=b5s&a=b' };
});
//baidu.com?
undefined&
undefined 这里没给返回值。
其实replace是很强大的一个方法。感觉要全部匹配并对正则分组有一些操作的话比上面的regObj.exec()用起来要方便。比如我们要解析这个url中所有的搜索条件以键值对的形式存入一个对象中。可以这样操作。
var obj = {};
href.replace(regObj1,function(
match,
$1,
$2){
obj[
$1] =
$2;
return match;
})
console.
log(obj);
其它关键词
正则表达式与编辑器(如Sublime Text)的搭配使用。
同步发表于:https://github.com/liusaint/JavaScript-record/issues/3