js--正则表达式

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 次时匹配。

JavascriptString对正则表达式的支持

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;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值