JavaScript正则表达式学习(上)

一 正则表达式概念

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
在学习正则表达式之前,需要先知道正则表达式的功能是什么,也就是我们为什么要用正则表达式。正则表达式强大之处在于它对字符串的搜索和替换。下面介绍它的常用功能。
1. 数据验证,也就是分析字符串内的模式。例如,可以测试输入字符串是否出现电话号码模式或邮箱号码模式。
2. 替换文本,我们可以使用正则表达式来识别文档中的特定文本或字符串,然后可以用指定的文本去替换被识别的文本。
3. 提取子字符串,可以用正则表达式去识别特定字符串并提取它。
在javascript中,正则表达式可以通过两种方式构造,一种是/exp/g,另一种为new RegExp(“exp”,”g”),其中exp为匹配模式。

二 正则表达式语法

1.构造函数
var reg = new RegExp('hello','g');
2.字面量
var reg = /hellog/g;
  • g:global,表示全文搜索,默认是搜索到第一个结果就不再搜索
  • i:ignore case,忽略大小写,默认是不忽略大小写
  • m:multiple lines,多行搜索

三 正则表达式的特殊字符

字符类
  • “[abc]”:简单类,匹配字符集合。此处匹配abc中任意一个字符
  • “[a-z]”: 范围类,匹配字符范围内的字符,此处匹配a到z的任意小写字符
  • “[^abc]”:负向类,匹配字符范围以外的任意字符,此处匹配除了a到z之外的任意字符
元字符
  • “^”:匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
  • "RegExpMultiline 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
  • “.”:除了换行和回车之外的任意字符,相当于[^\n\r]
  • “\w”:匹配字母,数字,下划线,相当于[a-zA-Z_0-9]
  • “\W”:匹配任意不是字母,数字,下划线 的字符[^a-zA-Z_0-9]
  • “\s”:匹配空白字符,相当于[\t\r\n\f\v]
  • “\S”:匹配任意非空白字符,相当于[^\t\r\n\f\v]
  • “\d”: 匹配数字,相当于[0-9]
  • “\D”: 匹配任意非数字的字符,,相当于[^0-9]
  • “.”:匹配除了换行符以外的任何字符,相当于[^\n\r]
  • “\b” :匹配一个字边界,即字与空格间的位置。如我想从字符串中”This is Regex”匹配单独的单词 “is” 正则就要写成 “\bis\b”。
  • “\B”:匹配非字边界
  • “a|b”:匹配字符a或者b
  • “\f”:匹配一个换页符。等价于”\x0c”
  • “\n”:匹配一个换行符。等价于”\x0a”
  • “\r”:匹配一个回车符。等价于”\x0d”
  • “\t”:匹配一个制表符。等价于”\x09”
  • “\v”:匹配一个垂直制表符。等价于”\x0b”
  • “\num”:匹配第num个匹配的引用,其中num是一个正整数。例如,’(.)\1’ 匹配两个连续的相同字符。
限定符(量词)
  • “*”:重复零次或更多,尽可能多的重复
  • “+”:重复一次或更多次,尽可能多的重复
  • “?”:重复零次或一次,尽可能多的重复
  • “{n}” :重复n次
  • “{n,m}”:重复n到m次,尽可能多的重复
  • “{n,}”:重复n次或更多次,尽可能多的重复
    注意:*、+、?、{n,m}和{n,}限定符都是贪婪的,贪婪的意思就是尽可能多的重复,它们会尽可能多的匹配文字。只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。例:对字符串”aaa”进行匹配,表达式”a+?”只能匹配到”a”,而”a+”却能匹配到”aaa”.

四 正则表达式函数

正则表达式函数
1.test方法(一般用于数据验证)
语法:regExp.test(stringObj)
regExp:正则表达式对象
stringObj:要进行检测的字符串
功能:该方法用来检测输入的字符串是否与正则表达式相匹配。匹配成功则返回true,不成功则返回false。该方法常用于数据验证,如验证email是否符合格式。

var reg = /^\d+@qq\.com$/;
reg.test('123@qq.com');//true

/\d+\.\d{1,2}$/g.test('123.25');//true
/\d+\.\d{1,2}$/g.test('a.25');//false

2.exec方法(一般用于提取子字符串)
语法:regExp.exec(stringObj)
stringObj:被查找的字符串
regExp:正则表达式对象
功能:该方法返回一个数组,数组的第一个元素就是匹配的字符串。如果有子分组的话,数组第二个元素就是正则中的第一个子分组匹配的结果,第三个是正则中第二个子分组匹配的结果…以此类推。如果没有正则子分组,那么该数组长度仅仅为1。

var reg = /\d/g;
reg.test('1a2b3c');//true
while(r=reg.exec('1a2b3c')){
    console.log(r.index+':'+r[0]);
}
//结果为
//0:1
//2:2
//4:3

3.match 方法(一般用于提取子字符串)
功能:使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。功能与exec类似。
语法:stringObj.match(regExp)
stringObj 被查找的字符串
regExp 正则表达式对象

var reg=/abc/;
reg.exec('11abc11abcdef');//["abc"]
'11abc11abcdef'.match(reg);//["abc"]

var reg=/abc/g;
reg.exec('11abc11abcdef');//["abc"]
'11abc11abcdef'.match(reg);//["abc","abc"]
//因为match执行了全局匹配查询;而exec如果没有子表达式只会找到一个匹配的即返回。

4.replcae 方法(一般用于替换文本)
功能:使用正则表达式模式对字符串执行查找,用另外的字符串去替换匹配的字符串。
语法:stringObj.replcae(regExp,stringObj2);
stringObj 被查找的字符串
regExp 正则表达式对象
stringObj2 用于替换的字符串

'abcabcabc'.replace(/bc/,"A");//aAabcabc
'abcabcabc'.replace(/bc/g,"A")//aAaAaA
'123456789'.replace('\d{3}',"$1-");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值