JavaScript:正则表达式的应用
应用正则表达式对象RegExp
创建正则表达式
JavaScript中使用RegExp对象来表述一个正则表达式。使用正则表达式之前首先要创建一个RegExp对象:
var oRexp = new RegExp(pattern,[flag]);
说明:
pattern:为必选项,表示以字符串格式表示的正则表达式。
flag:为可选项,是匹配选项,可用值如下:
修饰符 描述 i 执行对大小写不敏感的匹配。 g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 m 执行多行匹配。
用户不一定要显示的创建RegExp,还可以隐式地创建RegExp对象:
var oRegp = /pattern/[flag]
注意:
使用显式格式创建RegExp对象时,正则表达式中的“\”,要用“\\”来代替,且表达式开头和结尾不需要书写“/”。
判断字符串是否存在匹配内容
说明:
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
实例:
检测用户输入的邮箱是否匹配模式
<!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="css/style.css" rel="stylesheet"> </head> <body> <form> <input name="email" type="text" id="email"> <input name="check" type="button" value="检测" onclick="checkMail()"> </form> <script> function checkMail() { var objReg =/\w+[@]{1}\w+[.]{1}\w+/ //模式 var email = document.getElementById("email").value; if(objReg.test(email)) //利用test进行匹配检测,返回true或这false { alert("Email符合规范") }else{ alert("Email不符合规范") } } </script> </body> </html>
对字符串进行匹配检测
说明:
exec()方法,通过对指定的字符串进行一次匹配检测,获取字符串中第一个与正则表达式所匹配的内容,并将该匹配内容及其子匹配的结果存储到返回的数组中。
实例:
检测手机号,并将第一次匹配成功的内容及其子匹配的结果存储到返回的数组中。
<script> var objReg =/1[35](\d)(\d{8})/g; var ostring="我的电话13111111111 它的电话15222222222" var arr=objReg.exec(ostring); for(var i=0;i<arr.length;i++) { document.write(arr[i]); } </script>
说明:
这里只有第一次匹配到的,即13111111111这个电话,15222222222虽然也符合,但是这个方法只进行一次匹配。
替换字符串中的指定内容
说明:
replace()方法可以用指定的子字符串替换掉字符串中与指定额正则表达式相匹配的内容。
实例:
将所有数字变成X
<script> var objReg =/\d/g; var ostring="我的电话13111111111 它的电话15222222222" document.write(ostring.replace(objReg,'X')); </script>
匹配处理结果
在JavaScript中,使用正则表达式进行检索后,匹配结果将保存在集合中。本节将讲解该集合中的各种处理,如获取匹配位置、获取子匹配结果、获取匹配索引。
获取字符串中所有的匹配信息
说明:
String.match()方法返回一个数组,数组存储了字符串中所有的匹配信息。
实例:
匹配所有第二个字母为o的单词
<script> var objReg =/\wo(\w+)?/g; //所有第二个字母为0的单词 var ostring="Do you lova MS?" var arr = ostring.match(objReg); if(arr!=null) { for(var i=0;i< arr.length;i++) { document.write("<li>"+arr[i]) } } </script>
获取第一次匹配成功的起始地址
说明:
String.search()方法是与指定的正则表达式相比较,以得到与之相匹配的内容第一次出现时的位置。
实例:
检测第一次出现ABCBA类似形式的字串位置
代码:
<script> var objReg =/(\d)(\d)\d\2\1/; var ostring="11010111" var pos = ostring.search(objReg); if(pos!=-1) { var content = objReg.exec(ostring); alert("找到了,位置是"+pos+" 内容是"+content[0]); } </script>
效果:
补充:
说明:
这里用到了 后向引用
- 当一个正则表达式被分组之后,每一个组会自动被赋予一个组号,该组号可以代表该组的表达式。
- 分组的编制规则:从左至右,以左括号为标志,第一个分组为1,第二个分组为2,以此类推。
- 反向引用提供了查找重复字符组的方便方法。它可被认为是再次匹配同一个字符串的快捷指令。
第二种方式:
RegExp.index:静态属性,返回字符串第一次匹配出现的起始位置