l 正则表达式对象的创建
构造函数
var pattern =new RegExp("
正则表达式
","
修饰符
")
var pattern =new RegExp("abc","ig");
正则表达式字面量
var pattern = /
正则表达式
/
修饰符
;
var pattern = /abc/ig;
修饰符
i ignore case
不区分大小写
g global 全局
m multiline 多行
原型属性
RegExp.prototype.global
RegExp.prototype.ignoreCase
RegExp.prototype.multiline //修饰符是否定义 ,定义后不可更改
RegExp.prototype.lastIndex //
RegExp.prototype.source //表达式
原型方法
RegExp.prototype.exec()
var result = pattern.exec()执行正则,从参数获取目的字符串ü 参数:字符串ü 返回值:类数组对象数组:查询到的结果index: 查询到结果的索引input: 操作的字符串Ø 如果正则表达式中有修饰符 "g", 这时,在 pattern 中会维护 lastIndex 属性,记录下一次开始的位置,当第二次执行 exec 的时候,从 lastIndex 开始检索。Ø 如果正则表达式中没有修饰符 "g", 不会维护 lastIndex 属性,每次执行从开始位置检索
RegExp.prototype.test()
var result = pattern test();ü 参数:字符串ü 返回值:布尔类型Ø 如果正则表达式中有修饰符 "g", 这时,在 pattern 中会维护 lastIndex 属性,记录下一次开始的位置,当第二次执行 exec 的时候,从 lastIndex 开始检索。Ø 如果正则表达式中没有修饰符 "g", 不会维护 lastIndex 属性,每次执行从开始位置检索
RegExp.prototype.toString()
u 字符类
[直接量]
.
(点号,小数点
) 匹配任意单个字符,但是行结束符除外
\d 匹配任意阿拉伯数字。等价于[0-9]
\D 匹配任意一个
不是
阿拉伯数字的字符。等价于
[^0-9]。
\w 匹配任意来自基本拉丁字母表中的字母数字字符,还包括下划线。等价于 [A-Za-z0-9_]。
\W
匹配任意不是基本拉丁字母表中单词(字母数字下划线)字符的字符。等价于 [^A-Za-z0-
9_]。
\s 匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。
\S
匹配一个非空白符。
\t 匹配一个水平制表符(
tab)
\r
匹配一个回车符(
carriage return)
\n 匹配一个换行符(
linefeed)
\v 匹配一个垂直制表符(
vertical tab)
\f 匹配一个换页符(
form-feed)
u 字符集合
[xyz]
一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符
'-'
指定一个
范围。
[^xyz]
一个反义或补充字符集,也叫反义字符组。也就是说,它匹配任意不在括号内的字符。你也可以通过使用连字符
'-'
指定一个范围内的字符。
u 边界
^
匹配输入开始。如果多行(
multiline
)标志被设为
true
,该字符也会匹配一个断行(
line
break
)符后的开始处。
$ 匹配输入结尾。如果多行(
multiline
)标志被设为
true
,该字符也会匹配一个断行(
line
break
)符的前的结尾处。
\b 匹配一个零宽单词边界(
zero-width word boundary
),如一个字母与一个空格之间。
\B 匹配一个零宽非单词边界(
zero-width non-word boundary
),如两个字母之间或两个
空格之间。
u 分组
(x) 匹 配
x
并且捕获匹配项。 这被称为捕获括号(
capturing parentheses
)。
\n n
是一个正整数。一个反向引用(
back reference
),指向正则表达式中第
n
个括号(从
左开始数)中匹配的子字符串。
例如:
/\w+:\/\/\w+(.)\w+\1\w+/
u 数量词
x* 匹配前面的模式
x 0
或多次。
x+
匹配前面的模式
x 1
或多次。等价于
{1,}
。
x*?
像上面的
*
一样匹配前面的模式
x
,然而匹配是最小可能匹配。
x+?
像上面的
+
一样匹配前面的模式
x
,然而匹配是最小可能匹配。
x? 匹配前面的模式
x 0
或
1
次。
x|y
匹配
x
或
y
x{n} n
是一个正整数。前面的模式
x
连续出现
n
次时匹配
x{n,} n
是一个正整数。前面的模式
x
连续出现至少
n
次时匹配。
x{n,m} n
和
m
为正整数。前面的模式
x
连续出现至少
n
次,至多
m
次时匹配。
Javascript中 String对正则表达式的支持
l search()
参数为一个正则表达式。如果参数不为正则表达式,则先通过
RegExp
将其转换为构造函数。不
支持全局检索,返回第一个与之匹配的子串的位置,如果找不到匹配的子串,返回
-1
。类似于
正则表达式的
test
方法
l match()
最常用的正则表达式方法,参数为正则表达式。返回由匹配结果组成的数组。当正则表达式中
没有
g
修饰符的时候,就不是全局匹配。这时,数组的第一个元素就为匹配的字符串,剩余的元
素则是由正则表达式中用圆括号括起来的子表达式。如果该正则表达式设置为修饰符
g,
则该方
法返回的数组包含字符串中所有匹配结果。类似于正则表达式的
exec
方法
"1 plus 2 equals 3".match(/\d+/g) //
返回
["1","2","3"]
l replace()
用以执行检索和替换操作。第一个参数是正则表达式,第二个参数是要替换的字符串。
text.replace(/javascript/gi,“JavaScript”); //
不区分大小写将所有
javascript
转换为
JavaScript
l split()
参数可以为正则表达式
"1, 2, 3, 4, 5".split(/\s*,\s*/);
//["1","2","3","4","5"]
允许分隔符左右两边留有空白
var str="sdexx hello \nabc world\n java abc world\n";
//以abc开头的那一条数据
var pa = new RegExp("^abc.*$","igm");
var result = null;
while(result=pa.exec(str)){
console.log(result);
if(!pa.global) break;
}
var str="是一个正整数。前面的模式 x 连续出现 n 次时匹配";
var pa = /整数|中国|匹配/igm;
//var result = pa.test(str);
//console.log(result);
var result = pa.exec(str);
console.log(result);
var str="Learn about th javascript e origin of the \nworld's java most popular sports competition.\n Ljava001isten&Learn: javascript333 \nHelen Keller java25 : A javascript1 famous author and disability rights activist.";
//查找所有大于六个字母的单词
var pa = /[a-z]{6,}/igm;
var result = null;
var arr = [];
while(result=pa.exec(str)){
//console.log(result);
arr.push(result[0]);//arr[] = result[0];
}
console.log(arr);
//查询所有的javaxx javascriptxxx
var pa = new RegExp("j(ava)(script)?([0-9]*)","gm");
var result = null;
while(result=pa.exec(str)){
console.log(result);
}
var str="abc123cdr aaa3565767aaa 35464bcd8799bcd set33eee";
var pa=/[a-z]{3}\d+[a-z]{3}/igm;
var p2 = /([a-z]{3})\d+\1/igm;
var result=null;
while(result=pa.exec(str)){
console.log(result[0]);
}
var result2=null;
while(result2=p2.exec(str)){
console.log(result2[0],result2[1]);
}
var s = str.search(p2);//s -1 index
var m = str.match(p2);//m arr
var arr = [10,20,30,40];
var str = arr.plit("@");//10@20@30@40
var arr2 = str.split("@");[10,20,30,40]
var str="1001 & 1002&1003& 1004 &1005";
var pa=/\s*&\s*/g;
var arr = str.split(pa);
//1.new
var pattern = new RegExp("abc","igm");
var p2 = new RegExp("","");
console.log(pattern,typeof pattern);
console.log(p2.toString());
//字面量
var p3 = /abc/igm;
console.log(p3.toString(),typeof p3);
console.log(p3.__proto__ === RegExp.prototype);
console.log(RegExp.prototype);
//原型:属性、方法
var p1 = new RegExp("abc","i");
var p2 = /abc/igm;
console.log(p1.global,p1.ignoreCase,p1.multiline);
console.log(p2.global,p2.ignoreCase,p2.multiline);
p1.global=true;//无意义的
console.log(p1.global);
console.log(Object.getOwnPropertyDescriptor(RegExp.prototype,"global"));
console.log(p1.lastIndex,p1.source);
//exec()
var str="efrs xaw abCde \r\ncderf ddabc\r\n abc 2edd\r\n";
var pattern = new RegExp("abc","igm");
var result = pattern.exec(str);
console.log(result);//类数组对象
console.log(pattern.lastIndex);
console.log(result[0],"按规则匹配到的字符串");
console.log(result['index'],result.index,"在str中的位置",pattern.source);
console.log(result['input'] === str);
var result = pattern.exec(str);
console.log(result,pattern.lastIndex);
var result = pattern.exec(str);
console.log(result,pattern.lastIndex);
var result = pattern.exec(str);
console.log(result,pattern.lastIndex);
var result = pattern.exec(str);
console.log(result,pattern.lastIndex);
var p2 = new RegExp("abc","ig");
var r2 = p2.exec("rtyufvsdd");
console.log(r2,p2.lastIndex);
//用于将匹配到的数据筛选出来
//test()
//用于判断是否符合正则要求
//var p3 = new RegExp("abc","igm");
var p3 = new RegExp("abc","im");
var bool = p3.test(str);
console.log(bool,p3.lastIndex);
var bool = p3.test(str);
console.log(bool,p3.lastIndex);
var bool = p3.test(str);
console.log(bool,p3.lastIndex);
var bool = p3.test(str);//false 0
console.log(bool,p3.lastIndex);
/*
var boo2 = p3.test("abcsegssssss");
console.log(boo2,p3.lastIndex);
*/
var p4=/abc/igm;
var boo4 = p4.test("abcsetergdgd");
console.log(boo4,p4.lastIndex);
//循环遍历
var str="efrs xaw abCde \r\ncderf ddabc\r\n abc 2edd\r\n";
var pa = new RegExp("abc","igm");
//exec结束标志: result=null pa.lastIndex=0
/*
var result = null;
do{
result = pa.exec(str);
console.log(result[0]);
}while(result!=null && pa.lastIndex!=0);
*/
//do..while有风险:第一次执行
/*var result = null;
while((result=pa.exec(str))!=null){
console.log(result[0]);
*/
var result = null;
while(result=pa.exec(str)){//result=null Boolen(null)=false
console.log(result[0]);
if(!pa.global) break;
}
var result = null;
var arr = new Array();
while(result = pa.exec(str)){
arr.push = result[0];
if(!pa.global) break;
}