正则表达式学习

一、首先了解一下正则表达式的基本方法

字面量法:var re = /d(b+)d/

调用RegExp构造方法:var reg = new RegExp("/d(b+)d/","g");第一个参数是匹配规则,第二个参数是正则修饰符

i表示区分大小写

m表示多行匹配

g全局匹配

二、支持正则的字符串内置方法

var str = "cdbbdbsbz";

search()方法 例子:str.search(/d(b+)d/) //---1 该方法匹配成功返回匹配的索引,否则返回-1

match()方法:str.match(/d(b+)d/) //----["dbbd", "bb", index: 1, input: "cdbbdbsbz", groups: undefined]若有匹配的项返回array数组,否则返回null    ------注:str.match(/d(b+)d/g)全局匹配返回 ["dbbd"]

exec()方法:/d(b+)d/g.exec(str)//----["dbbd", "bb", index: 1, input: "cdbbdbsbz", groups: undefined]

var myRe = /d(b+)d/g;
var myArray = 'cdbbdbsbz'.match(myRe);console.log('myRe.lastIndex', myRe.lastIndex); // 下一个匹配开始时的索引-----0
var myRe = /d(b+)d/g;var myArray = myRe.exec('cdbbdbsbz');
console.log('myRe.lastIndex', myRe.lastIndex); // 下一个匹配开始时的索引---------5

总结:对于 RegExp 的方法 exec 匹配成功时,会返回该数组并更新正则的全局检索属性(lastIndex);而字符串的方法 match 则不会更新全局检索属性

replace()方法 str.replace(/d(b+)d/,"...")//----c...bsbz 根据一个正则替换字符串匹配项的方法,返回替换后的字符串


第二个参数可以是,  $1,$2,$3….$99 含义是:与regexp中的第1到第99个子表达式相匹配的文本

例如:

var str = '123-mm';
var strReg = str.replace(/(\d+)-([A-Za-z]+)/g,'$2');//mm
$1,$2.. 表示的是第几个括号匹配的内容

test()方法:是否存在匹配项的方法,若存在返回true否则返回false

split()方法:


正则表达式的元字符类型如下:

.查找任意单个字符,换行符除外
\w任意一个字数数字下划线0-9,a-z,A-Z中任意一个[A-Za-z0-9_]
\W查找非数字字母下划线的字符[^A-Za-z0-9_]
\d匹配一个数字字符[0-9]
\D匹配一个非数字字符[^0-9]
\s

匹配空白字符包括空格,制表符等[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]

\S  匹配非空白字符[ ^\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
\b 
\B 
x|y表示匹配x或者y
(x)表示匹配分组 x,并保存匹配结果(反向引用),这组小括号被称为捕获括号
(?:x)   

表示匹配分组但不产生反向引用,这组小括号被称为非捕获括号

比如:对于 /foo{1,2}/ 中的 {1,2} 表示匹配最后的字符 'o' 一次到两次。对于 (?:foo){1,2} 中的 {1,2} 表示匹配一组字符 "foo" 一次到两次。

x(?=y)      表示只匹配后边紧跟分组y的字符x,先行断言 比如:Jack(?=Sprat|Frost) 表示只匹配后面跟着 "Sprat" 或 "Frost" 的 "Jack"。
x(?!y)  表示只匹配后面不是紧跟着分组 y 的字符 x,这模式称为否定先行断言(lookahead)。比如:/\d+(?!\.)/表示匹配没有小数点的数字。
  
  
  
  
  


量词:

+匹配一次或者多次相当于{1,}
*匹配0次或者多次相当于{0,}
匹配0次或者是1次相当于{0,1}如果 ? 是限定符 * 或 + 或 ? 或 {} 后面的第一个字符,那么表示非贪婪模式(尽可能少的匹配字符)
{n}

匹配n次

{n,m}匹配最少n个最多m个字符串
{n,}匹配至少n个某个字符串

位置符号:

$结束符号例如:n$以n结束的字符串。 在多行模式下,表示 匹配每行的结束。
^

表示匹配字符串的开头、多行模式下,表示匹配每行的开头。注意:如果出现在集合中的第一个字符,它表示否定的意思

比如:[^ab] 表示匹配不是 "a"或 "b" 的字符。

?=肯定正向环视 例:?=n,匹配其后紧接指定的n字符串var pattern=/str(?=ings)ing/;/ 表示匹配 r 后面必须有ings的 string字符
?!否定正向环视,例如:?!n,匹配其后没有紧接指定的n字符串
  

字符类:

[0-9]匹配 0 到 9 间的字符
[a-zA-Z]匹配任意字母
[^0-9]不等于0到9的其它字符

例如:

function upper(all,letter){

console.log("all="+all+"letter="+letter)
     return letter.toUpperCase();
}
var pattern=/-(\w)/g;//传入匹配的完整的字符串作为第一个参数,捕获结果作为第二个参数
var str="border-bottom-width";
console.log(str.replace(pattern,upper)); //borderBottomWidth
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值