正则表达式

正则表达式

正则表达式字符

正则转义字符

.:任意字符

\s:匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。

\S:非空格

\d:数字

\D:非数字

\w:字符

\W:非字符

\b:匹配一个单词边界,也就是指单词和空格间的位置。

\B:非独立部分

正则表达式 - 元字符

var str=" one two";
var re=/\bone/;
re.test(str);
//true

\1:重复的第一个子项

/\w\w/ //c9

/(\w)\1/ //cc 99

符号

当正则需要传参,必须使用完整写法;

var re=new RegExp('\\b'+str);

^ :正则的最开始位置,代表起始的意思

$ :正则的结束位置,代表结束的意思

  • 匹配子项 : 小括号() 分组操作

var str='2013-6-7';
var re=/(\d+)(-)/g;

var nstr=str.replace(re,function($0,$1,$2){
    console.log($0);
    console.log($1);
    console.log($2);
});
/*
2013-
2013
-
6-
6
-
*/

第一个参数是这次匹配被替换的整体,之后的依次是每一个子项。

字符类

字符类 :中括号的整体代表一个字符

排除: ^如果写在[]里面,代表排除的意思。

var str='abc';

var re=/a[bde]c/;
var re1=/a[^ssde]c/;
console.log(re.test(str));
console.log(re1.test(str));
//true
//true

取出HTMl标签

var str="<h3 style='color:red;'>欢迎光临</h3>";

var re=/<[^>]+>/g;

console.log(str.replace(re,""));

正则表达式的常用方法

  • test()

test()正则去匹配字符串,如果匹配成功就返回真。

> var str='ereww'
undefined
> var re=/e/;
undefined
> re.test(str)
true
  • exec()

  1. 如果执行exec()方法的正则表达式没有分组(没有括号括起来的内容),那么如果有匹配,他将返回一个只有一个元素的数组,这个数组唯一的元素就是该正则表达式匹配的第一个串;如果没有匹配则返回null。

var str= "cat,hat" ;
var p=/at/; //没有g属性
p.exec(str);//at
p.exec(str);//at

------

var str= "cat,hat" ;
var p=/.at/g; //注意g属性
p.exec(str);//cat
//继续调用会在原基础上匹配下去
p.exec(str);//hat
  1. 如果包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组(反向引用)。

var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null
var re = /(\d{3})-(\d{3,8})/g;
re.exec('010-12345-234-42334 345-4235');
//["010-12345", "010", "12345", index: 0, input: "010-12345-234-42334 345-4235"]

g属性对exec()函数是没有任何作用。

参考:http://www.cnblogs.com/xiehuiqi220/archive/2008/12/01/1327487.html

  • search()

search()正则去匹配字符串,如果匹配成功,如果匹配成功就返回成功的位置。失败就返回-1

> var str="we234DFEG";
undefined
> str.search(/df/i);
5

i标识代表忽略大小写。 g标识代表全局匹配。

  • match()

match():正则去匹配字符串,如果匹配成功,就返回成功的数组。不成功就返回null

> var str='12341qwe1243534634';
undefined
> var re=/\d+/g
undefined
> str.match(re)
[ '12341', '1243534634' ]
  • replace()

replace():正则去匹配字符串,匹配成功的字符串去替换成新的字符串。

> var str='abcABC';
undefined
> re=/a+/ig
/a+/gi
> str.replace(re,"ppp")
'pppbcpppBC'
//或者可以这样写

> str.replace(re,function(word){
    //有参数,被替换的字符
    return '**';
});

量词

量词 :{}

{4,7}:最小出现4次,最多出现7次。 {4,}:最小出现4次 {4}:正好出现4次

+:{1,}

?:{0,1}

*:{0,}

贪婪匹配

正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。

var re = /^(\d+)(0*)$/;
re.exec('102300'); // ['102300', '102300', '']

//非贪婪匹配

var re = /^(\d+?)(0*)$/;
re.exec('102300'); // ['102300', '1023', '00']

使用+?这样可以非贪婪匹配。

元字符

需要加\才表示元字符意思的字符:

^ $ ( ) * + ? . [ \ { |

正则表达式练习网站

Last updated