1.创建正则表达式的两种方式:
一, var box=new RegExp("box");
var box=new RegExp("box","ig"); //第一个参数是模式字符串 , 第二个参数是模式修饰符 i(忽略大小写) g(全局匹配) m(多行匹配)
alert(box); // /box/
二,
var box=/box/i ; //字面量方式创建正则,常用的方式
两种方法
test()方法 返回true or false
exec方法()返回查找的结果数组,如果匹配不到返回null
三,
var pattern =new RegExp('Box');
var str='box';
pattern.test(str);
四 使用字符串的正则表达式的方法
//match方法
var pattern=/Box/ig;
var str="this is a Box! that is a Box!"
str.match(pattern); //返回的是匹配的数组
//search 查找匹配的位置
var pattern=/Box/i;
var str="this is a Box! that is a Box!"
str.search(pattern); //返回的是第一个匹配的位置 找不到返回-1
//replace替换匹配的数据
var pattern=/Box/i; (g) //没有开启全局
var str="this is a Box! that is a Box!"
str.replace(pattern,‘tom’); //返回替换后的字符串,只限第一个
//拆分成字符串为数组
var pattern=/!/ig;
var str="this is a Box! that is a Box!"
str.split(pattern); //按照感叹号划分为三个数组,后面有一个空数组
五,正则表达式的静态属性和实例属性
静态属性(支持度不好)
var pattern=/google/i;
var str="this is a google!"
pattern.test(str); //必须执行一次,静态属性才有效
RegExp.input; //当前被匹配的字符串
RegExp.leftContext;//匹配到的字符的前字串
RegExp.rightContext;//匹配到的字符的后字串
RegExp.lastMatch;
( lastParen 最后一对圆括号里面的字符串
multiline 用于指定是否所有的表达式都用于多行的标准 //支持度很不好,看看是否支持多行
)
实例属性
RegExp.global ignoreCase multiline source lastIndext(整数 代表下次匹配将从哪里开始匹配)
六
{n, m} 匹配前一项至少n次,但是不能超过m次 n<=pattern<=m
{n, } 匹配前一项n次,或者多次 pattern>=n
{n} 匹配前一项恰好n次 pattern=n
? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1} patttern=0||pattern=1
+ 匹配前一项1次或多次,等价于{1,} pattern>=1
* 匹配前一项0次或多次.等价于{0,} pattern>=0
{n, } 匹配前一项n次,或者多次 pattern>=n
{n} 匹配前一项恰好n次 pattern=n
? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1} patttern=0||pattern=1
+ 匹配前一项1次或多次,等价于{1,} pattern>=1
* 匹配前一项0次或多次.等价于{0,} pattern>=0
字符 匹配
____________________________________________________
[...] 位于括号之内的任意字符
[^...] 不在括号之中的任意字符
. 除了换行符之外的任意字符,等价于[^\n]
\w 任何单字字符, 等价于[a-zA-Z0-9]
\W 任何非单字字符,等价于[^a-zA-Z0-9]
\s 任何空白符,等价于[\ t \ n \ r \ f \ v]
\S 任何非空白符,等价于[^\ t \ n \ r \ f \ v]
\d 任何数字,等价于[0-9]
\D 除了数字之外的任何字符,等价于[^0-9]
[\b] 一个退格直接量(特例)
____________________________________________________
[...] 位于括号之内的任意字符
[^...] 不在括号之中的任意字符
. 除了换行符之外的任意字符,等价于[^\n]
\w 任何单字字符, 等价于[a-zA-Z0-9]
\W 任何非单字字符,等价于[^a-zA-Z0-9]
\s 任何空白符,等价于[\ t \ n \ r \ f \ v]
\S 任何非空白符,等价于[^\ t \ n \ r \ f \ v]
\d 任何数字,等价于[0-9]
\D 除了数字之外的任何字符,等价于[^0-9]
[\b] 一个退格直接量(特例)
字母数字字符 自身
\ f 换页符
\ n 换行符
\ r 回车
\ t 制表符
\ f 换页符
\ n 换行符
\ r 回车
\ t 制表符
\b | 匹配一个单词的边界 |
\B | 匹配一个单词的非边界 |
对象的属性
constructor | 创建一个对象的一个特殊的函数原型 |
global | 是否在整个串中匹配(bool型) |
ignoreCase | 匹配时是否忽略大小写(bool型) |
input | 被匹配的串 |
lastIndex | 最后一次匹配的索引 |
lastParen | 最后一个括号括起来的子串 |
leftContext | 最近一次匹配以左的子串 |
multiline | 是否进行多行匹配(bool型) |
prototype | 允许附加属性给对象 |
rightContext | 最近一次匹配以右的子串 |
source | 正则表达式模式 |
lastIndex | 最后一次匹配的索引 |
正则表达式对象的方法
|
var pattern=/^[0-9]oogle/; //以数字开头的,如果^在中括号里面[^] 表示的是除了中括号中的字符,代表的是非
var str='4444oogle';
alert(pattern.test(str));
var pattern=/google|baidu|bing/;//|竖线表示或选择的问题
var str='baidu';也是可以匹配的
一 使用分组类匹配
var pattern=/google{4,8}$/;
var str='googleeeee';
分组可以看成一个字符
var pattern=/(google){4,8}$/;
var str='googleeeee';匹配不了的
1.
var pattern=/8(.*)8/;
var str='This is a 8google8 ';
pattern.test(str);
alert(RegExp.$1); //RegExp.$1表示获取模式中第一个分组对应的字符串
2,
var pattern=/(.*)\s(.*)/;
var str='baidu google';
alert(str.replace(pattern,'$2 $1')); //位置交换
3
var pattern=/(\d+)([a-z])/;
var str='123abc';
var a=pattern.exec(str);
alert(pattern.exec(str)); //a[0] 得到的是匹配到的整个字符串
//a[1] 得到的匹配到的第一个分组的字符串
//a[1] 得到的匹配到的第二个分组的字符串