JS之RegExp对象(二)
版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/zkn_CS_DN_2013/article/details/24243159
RegExp对象的经常用法有test、exec和compile,本节介绍这些方法的功能和用法。
最后,对RegExp对象的属性和方法进行一个综合举例。
2.1 test方法
语法格式为test(str)。该方法检查一个字符串中是否存在创建RegExp对象实例时所指定的表达式模式,假设存在就返回True,否则返回False。假设找到匹配项,则会更新RegExp对象中的有关静态属性。以反映匹配情况。
2.2 exec方法
语法格式为exec(str)。该方法使用创建RegExp对象实例时所指定的表达式模式对一个字符串进行搜索。并返回一个包括搜索结果的数组。
假设为正則表達式设置了全局标志(g),能够通过多次调用exec和test方法在字符串中进行连续搜索,每次都是从RegExp对象的lastIndex属性值指定的位置開始搜索字符串。
假设没有设置全局标志(g),则exec和test方法忽略RegExp对象的lastIndex属性值,从字符串的起始位置開始搜索。
假设exec方法没有找到匹配,返回值为null;假设找到匹配,则返回一个数组,并更新RegExp对象中有关静态属性以反映匹配情况。返回数组中的元素0包括了完整的匹配结果。而元素1~n依次是表达式模式中定义的各个子匹配的结果。
exec方法返回的数组有3个属性,各自是input、index和lastIndex。
input属性是整个被搜索的字符串。
index属性是指匹配在整个被搜索字符串中的位置。
lastIndex属性是指匹配的子字符串的最后一个字符的下一个字符位置。
代码2.1是对该方法的应用举例。
代码2.1 exec()方法应用:2.1.htm
<html>
<head>
<title>exec()方法应用</title>
<scriptlanguage = "JavaScript">
varmyString="aaa 111 bbb 222 ccc 1111 222ddd";
varregex =/111/; //创建正則表達式对象
vararray=regex.exec(myString);
if(array){
var
str="找到了匹配子串!"+"\n返回数组的值为:"+array+"\n数组元素个数:"
+array.length+"\n被搜索的字符串为:"+array.input
+"\n匹配子串的開始位置为:"+array.index
+"\n匹配子串后面第一个字符的位置为:"+regex.lastIndex;
alert(str);
}
else{
alert("未找到匹配子串。!");
}
</script>
<body></body>
</html>
2.3 compile方法
语法格式为compile("pattern"[,"flags"])。该方法能够更换RegExp对象实例所使用的表达式模式,并将新的表达式模式编译为内部格式,从而使以后的匹配过程运行更快。假设要在循环中反复使用某个表达式,对其进行编译将使运行加速。可是,假设在程序中使用了不论什么其它表达式模式后,再使用原来编译过的表达式模式,则这样的编译毫无 益处。
2.4 综合举例
代码2.2是对RegExp对象的综合举例,认真分析代码及其运行结果。能够更好地理解RegExp对象。
代码2.2 RegExp对象的使用:2.2.htm
<scriptlanguage="javascript">
var
strSrc = "xxa1b01c001yya2b02c002zz";
var
re = /a(\d)b(\d{2})c(\d{3})/gi;
var
arr, count = 0;
while
((arr = re.exec(strSrc)) != null)
{
displayResult();
}
function
displayResult()
{
document.write("<p>这是用正則表達式/"
+ re.source + "/gi对字符串<br>""
+
RegExp.input + ""进行第" + (++count) + "次搜索的结果:<br>");
document.write("RegExp.index为"
+ RegExp.index + "<br>");
document.write("RegExp.lastIndex为"
+ RegExp.lastIndex + "<br>");
document.write("RegExp.lastMatch为"
+ RegExp.lastMatch + "<br>");
document.write("RegExp.lastParen为"
+ RegExp.lastParen + "<br>");
document.write("RegExp.leftContext为"
+ RegExp.leftContext + "<br>");
document.write("RegExp.rightContext为"
+ RegExp.rightContext +"<br>");
document.write("RegExp.$1为"
+ RegExp.$1 + "<br>");
document.write("RegExp.$2为"
+ RegExp.$2 + "<br>");
document.write("RegExp.$3为"
+ RegExp.$3 + "<br>");
document.write("RegExp.$4为"
+ RegExp.$4 + "<br>");
document.write("arr.index为"
+ arr.index + "<br>");
document.write("arr.input为"
+ arr.input + "<br>");
document.write("arr.lastIndex为"
+ arr.lastIndex + "<br>");
document.write("返回数组的元素个数为"
+ arr.length + "<br>");
document.write("返回数组的内容为["];
for(var
i=0; i<arr.length; i++)
{
if(i
< arr.length-1)
document.write("""
+ arr[i] + "",");
else
document.write("""
+ arr[i] + "")</p>");
}
}
</script>
JS之RegExp对象(二)的更多相关文章
- 前端之JavaScript:JS之DOM对象二
继续JS之DOM对象二 前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement(' ...
- 原生JS:RegExp对象详解
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- JS之RegExp对象(一)
JavaScript提供了一个RegExp对象来完毕有关正則表達式的操作和功能,每一条正則表達式模式相应一个RegExp实例.有两种方式能够创建RegExp对象的实例. 使用RegExp的显 ...
- 继续JS之DOM对象二
前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement('a');添加节点:ele ...
- JS之DOM对象二
前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement('a');添加节点:ele ...
- js进阶正则表达式实现过滤字符串(RegExp对象操作正则表达式)(正则:regular)(表达式:expression)
js进阶正则表达式实现过滤字符串(RegExp对象操作正则表达式)(正则:regular)(表达式:expression) 一.总结 1.str_replace:正则作用:高效快速匹配 2.break ...
- js进阶正则表达式13RegExp对象方法(RegExp对象的方法:compile,test,exec)(子表达式 var reg1=/([a-z]+)\d/)
js进阶正则表达式13RegExp对象方法(RegExp对象的方法:compile,test,exec)(子表达式 var reg1=/([a-z]+)\d/) 一.总结 1.RegExp对象有三个方 ...
- js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译)
js进阶正则表达式11RegExp的属性和方法(RegExp的属性和方法,就是RegExp对象.(点)什么的形式)(正则表达式执行之前会被编译) 一.总结 1. RegExp的属性和方法,就是RegE ...
- JS RegExp对象(正则表达式)
笔记整理自:廖雪峰老师的JS教程 正则表达式语法:https://www.runoob.com/regexp/regexp-tutorial.html 目录 创建方式 方式一 方式二 简单使用 判断正 ...
随机推荐
- Codeforces 879C/878A - Short Program
传送门:http://codeforces.com/contest/879/problem/C 本题是一个位运算问题——位运算的等价变换. 假设位运算符“&”“|”“^”是左结合的,且优先级相 ...
- python 数据库操作产生中文乱码的解决办法
1.执行python mysql数据库查询操作时,产生中文乱码 #!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb db = MySQLd ...
- HDU4462稻草人
l问题描述:有一块N*N的玉米田(N<=50),给定K个(X,Y)的坐标位置(K<=10)和相应的覆盖范围,请问,至少在这K个位置中选择几个放置稻草人,能保证玉米田全被覆盖? #i ...
- 【概率dp】C. Race to 1 Again
https://www.bnuoj.com/v3/contest_show.php?cid=9146#problem/C [题意] 给定一个数D,每次随机选取这个数的一个因子x得到新的数D=D/x,知 ...
- 【POJ3254】Corn Fields(状压DP)
题意: 一个M x N矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻.问有多少种放牛方案( ...
- iOS 如何查看崩溃日志
参考网址: [转载]https://www.jianshu.com/p/4de55d73c82b [转载]https://blog.csdn.net/qq_26544491/article/detai ...
- HDU 1669 二分图多重匹配+二分
Jamie's Contact Groups Time Limit: 15000/7000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/ ...
- 洛谷——P1047 校门外的树
P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- [洛谷U22158]策划体验(树上斜率优化)(二分最优决策)
题目背景 OL不在,Clao又在肝少*前线,他虽然觉得这个游戏的地图很烦,但是他认为地图的难度还是太低了,习习中作为策划还不够FM,于是他自己YY了一种新的地图和新的机制: 题目描述 整个地图呈树形结 ...
- Spring MVC静态资源实例
以下内容引用自http://wiki.jikexueyuan.com/project/spring/mvc-framework/spring-static-pages-example.html: 例子 ...