Javascript正则表达式

时间:2014-05-25 16:05:08   收藏:0   阅读:272

正则表达式

正则用来从字符串筛选出子字符串。

简单使用

两种定义方式

  1. /.../ 声明

    /java/可以匹配任何包含java子串的字符串

  2. 构造函数RegExp

    1
    new RegExp(‘[/]‘,‘g‘)

    构造函数可传入两个参数,第一个参数是字符串,若有转义,用"\",比如"\\",第二个参数是修饰符(i、g、m)。动态创建正则表达式时只能用构造函数,(虽然eval也可以使用)。

修饰符和属性

正则的语法

字符

正则表达式中所有的字母和数字都是按照其字面含义进行匹配的,也支持()开头的转义

常用转义字符列表

转义字符 含义
\n 换行符
\r 回车符
\t 制表符

特殊含义的标点符号,必须使用前缀\,为求保险,可以在每个标点符号前都加上反斜线。

比如 /\\/用以匹配任何包含反斜线的字符串

字符类

把字符放到方括号内,就构成了字符类。

[a-zA-Z0-9]就是字符类

预定义类 含义
. 除了换行符合其他Unicode行终止符之外的任何字符
\w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\W 任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]
\s 任何Unicode空白符
\S 任何非Unicode空白符的字符,注意\w和\S不同
\d 任何ASCII数字,等价于[0-9]
\D 除了ASCII数字之外的任何字符,等价于[^0-9]

重复

{n,m} n到m次;

{n,} n以上次;

{n} n次;

? 0到1次;

+ 1到n次;

* 0次以上

注意: /a+?b/匹配“aaab“时,匹配的结果仍是aaab,因为匹配的时候,是从第一个字符开始的。

选择项

选择项| 从左到右匹配,直到发现匹配项,就停止匹配,类似Js运算符‘||‘

eg./ab|cd|ef/可以匹配字符串"ab","cd","ef"。

分组和引用 ()

单纯的分组 (?: 内容 )

指定匹配位置

^ 匹配字符串的开头,在多行检索中,匹配一行的开头

$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾

\b匹配一个单词的边界,一种情况

1
2
3
4
5
6
/**
 * 使用\b,这种情况比较特殊
 */
var str = ‘.java is very good‘;
var match = /\b([\w]+)\b/.exec(str);
//0:java 1:java index:1 input:.java is very good

\B 匹配非单词的位置

(?= p)先行断言

(!= p)先行断言

正则的方法

search

1
2
var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
console.log(data.search(reCat));// 23

字符串String的方法,唯一的参数是正则,返回第一个与之匹配的字串的起始位置,从0开始计数;若没找到,返回-1。

传入的参数若不是正则表达式,自动转化成正则,不支持全局搜索。

repalce

字符串String的方法,第一个参数是正则表达式,第二个参数是要替换的字符串,返回替换后的新字符串,被作用的字符串不变;g是全局搜索替换标志,若第一个参数是字符串,字符串直接替换匹配的字符串。第二个参数若有$加数字,且正则表达式有相应子表达式,则使用引用替换。

第二个参数还可以是函数,函数的第一个参数是匹配的字符串,第二个参数开始,是模式匹配的括号的子表达式字符串,然后是匹配字符串的位置,最后是当前字符串。return返回替换的字符串。

1
2
3
4
var str="acd6fadf9fa5fa";
var newStr = str.replace(/\d/g,function(item){
    return parseInt(item)+7;
})

match

1
2
3
var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
var reCat = /cat/gi;
var arrMactches = data.match(reCat)//0:Cat 1:cat

字符串String的方法,唯一的参数是正则,返回由匹配的(所有)字符子串和RegExp子表达式组成的数组;若没找到,返回null。

传入字符串时,注意要用转义字符,js会自动转化成正则表达式,支持g;当match传入非全局的正则时,效果与exec一样,这时返回的数组有两个属性,index和input,index表示匹配字串前有几个字符。。

split

1
2
var data = "1 ,  2, 3,4,     5";
var arrRes = data.split(/\s*,\s*/);

将调用它的字符串拆成一个字串组成的数组,参数是分隔符,分隔符可以是正则表示式

exec

1
2
var tt = "#fdas.fa"                                                       
tt = /[\w]+/.exec(tt);// tt 0:fdas, index:1, input:"#fdas.fa"

正则的方法,传入字符串,返回由匹配字符子串和RegExp子表达式组成的数组,数组的input属性是正在检索的字符串;找不到匹配,则返回null;

正则具有全局修饰符g时,查找时会与lastIndex一起配合,查询到字串后,将lastIndex置为字串所在字符串的后一位,第二次查找,会从lastIndex位置开始,若未找到匹配,自动将lastIndex置为0。

1
2
3
4
5
6
7
8
9
/**
 * lastIndex值的变化
 */
var pattern = /Java/g;
var text = "JavaScript is more fun than Java!";
var result;
while ((result = pattern.exec(text)) !== null) {
    console.log(result + ‘index‘ + result.index + ‘lastIndex‘ + pattern.lastIndex);
}

test

行为与exec类似,只不过返回的是true或false

例子

参考

javascript正则表达式-司徒正美

JavaScript权威指南

Javascript正则表达式,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!