js方法的使用(z)
http://www.108js.com/article/article1/10025.html?id=58
javascript中正则匹配有3个方法,match,exec,test。这些方法都跟字符串和RegExp对象有关,但使用场景不一样,容易混淆。match是字符串的一个方法,接收一个RegExp对象做为参数,其他的是RegExp对象的方法,接收一个字符串参数。
<script>
var str = 'abcdef12ab34cd56ef';
var patt = new RegExp('ab'); //注意是非全局匹配
var ret_test = patt.test(str);
alert(ret_test);
var ret_match = str.match(patt);
alert(ret_match);
var ret_exec = patt.exec(str);
alert(ret_exec);
</script>
点击观看效果
1. regExp.test(string)
该方法最简单,在string中找到匹配regExp的字符串则返回true,没找到匹配的字符串则返回false
2. regExp.exec(string)
该方法稍微复杂些。
当regExp没有全局标志时,其返回值为字符串数组:数组的第0号元素为刚匹配到的字符串,如果regExp有子表达式,则数组第1号元素为regExp的第一个子表达式,第2号元素为regExp的第二个字表达式...以此类推。在上例中如果
patt = new RegExp('f(\\d)(\\d)','g');则 ret_exec 将为字符串数组:['f12','1','2']。
在设置g属性后,虽然匹配结果不受g的影响,返回结果仍然是一个数组(第一个值是第一个匹配到的字符串,以后的为分组匹配内容),但是会改变index和lastIndex等的值,将该对象的匹配的开始位置设置到紧接这匹配子串的字符位置,当第二次调用exec时,将从lastIndex所指示的字符位置开始检索。同样match方法在设置了g属性后,也会改变index和lastIndex的值,但是是一次性的。无法像exec那样能逐过程累积,因此无法累积获取下一次检索的位置。
<script>
var patt = new RegExp('ab', 'g');
var str = 'abcdef12ab34cd56ef';
var ret;
while((ret = patt.exec(str))!=null) {
document.write(ret+"</br>");
document.write("ret.input="+ret.input+"</br>");
document.write("ret.index="+ret.index+"</br>");
document.write("RegExp.lastIndex ="+RegExp.lastIndex +"</br>");
}
</script>
运行:
ab
ret.input=abcdef12ab34cd56ef
ret.index=0
RegExp.lastIndex =2
ab
ret.input=abcdef12ab34cd56ef
ret.index=8
RegExp.lastIndex =10
exec方法返回的不是标准的数组,应该算是一个类数组,因为它还有2个属性:input是输入的字符串,index是当前匹配的字符串第一个字符在input中的位置。
3. string.match(regExp)
该方法比exec简单一些,因为它不用考虑regExp的lastIndex属性。同样,也需要分两种情况(全局匹配与非全局匹配)
当regExp没有全局标志时,返回值与调用exec一样,返回一个数组,数组的第0号元素为刚匹配到的字符串,如果regExp有子表达式,则数组第1号元素为regExp的第一个子表达式,第2号元素为regExp的第二个字表达式...以此类推。主意该数组同时还有2个属性:input是输入的字符串string,index是当前匹配的字符串第一个字符在input中的位置。
当regExp有全局标志(g选项)时,很简单,也符合我们的理解:返回所有匹配到的字符串组成的数组。这是标准数组,没有input属性,也没有index属性。返回值数组中除了匹配到的字符串没有任何其他信息。
<script>
var src = "The rain in Spain falls mainly in the plain.";
var re = /\w+/g; //有g属性。
var i = 0;
while (i++<10){
arr = src.match(re);
document.write(RegExp.index + "-" + RegExp.lastIndex + "\t" + arr + "<br/>");
}
</script>
运行:
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
38-43 The,rain,in,Spain,falls,mainly,in,the,plain
从上面的分析看出,如果你只是想判断字符串是否匹配某个正则表达式,就用test方法。如果想一次性取出所有匹配到的字符串,或者只找到第一个匹配的字符串就可以,就用match方法。如果你想多次匹配,而且需要知道每个匹配到的字符串在原始字符串中的位置,或者正则表达式中还有子表达式信息需要关注,就用exec方法。
测试题:
var someText="web2.0 .net2.0";
var pattern=/(\w+)(\d)\.(\d)/g;
var outCome_exec=pattern.exec(someText);
var outCome_matc=someText.match(pattern);
What is outCome_exec[1] and outCome_matc[1]??
Choice A: true
Choice B: false
Choice C: null
Choice D: Web
Choice E: Web2.0
Choice F: undefined
Choice G: net2.0
答案为D和G。你想明白了么?
转载于:https://www.cnblogs.com/ryhan/p/5903156.html
js方法的使用(z)相关推荐
- 常用前端JS代码与JS方法
[返回Z平台-帮助文档-首页] Z平台的核心JS方法都存储在 /webapp/js/z.js 文件中,如果想更全面的学习Z平台的开发,建议大家熟读该文件.平台前端的核心JS方法都在这. 共用JS方法 ...
- 用js方法做提交表单的校验
基础知识: 原始提交如下: <form action="<%=basePath %>puser/register" method="post" ...
- java如何调用js_java如何调用js方法
js方法如下:function add(a,b){ return a + b + number; } 调用方法如下:(免费学习视频教程分享:java视频教程)package com.cgnb.data ...
- Silverlight调用的JS方法返回对象数组的处理方法
最近在做Silverlight应用,需要用Silverlight调用页面中Javascript方法.这个JS方法返回一个对象数组给Silverlight.对于这个对象数组怎么在Silverlight里 ...
- 如何在java中调用js方法
[java] view plain copy/* * 加载脚本引擎,并在java中调用js方法 */ public void test2() { ScriptEngineManager manager ...
- js/jq基础(日常整理记录)-2-一个简单的js方法实现集合的非引用拷贝
一.一个简单的js方法实现集合拷贝 做web项目的时候,少不了和js中的数组,集合等对象接触,那么你肯定会发现,在js中存在一个怪异的现象就是数组和集合的拷贝都是地址复制,并不是简单的数据的拷贝. 举 ...
- android 连续调用js方法,Android的WebView中的JavascriptInterface:对JS的多次调用会导致死锁...
这是我用过的整个Java代码.我将在下面更详细地解释... public class Test7 extends Activity { //debug private final static Str ...
- 用服务器控件在后台调用前台客户端JS方法
今天试着研究了一下服务器控件来控制JS代码(可见不仅仅HTML控件可以调用JS方法,服务器控件也可以调用JS方法), 本人觉得有点实用,现分享如下: 前台代码如下: js方法:<script l ...
- Java调用js方法
js函数保存在String字符串中 package com.netease.qiyu.test.datastageservice.service.impl;import com.netease.qiy ...
最新文章
- 《CCNP TSHOOT 300-135认证考试指南》——5.1节“我已经知道了吗?”测试题
- SaltStack状态导入(include)
- apache的日志级别和设置
- cve-2019-11076 Cribl UI 1.5.0 未授权命令执行漏洞分析
- 基于SQL的日志分析工具myselect
- 【差分】Tallest Cow(poj 3263/luogu 2879)
- 面试题,你做了哪些事情来提升自己的沟通能力?
- js 把对象按照属性名的字母顺序进行排列
- python二进制移位_python移位运算的实现
- 推荐一个vs自带工具分析代码的复杂度
- .net core websocket
- APT***实例研究与企业现有防御体系缺陷分析
- windows XP cmd命令大全
- 计算机软件工程职业道德论文,软件工程职业道德论文_软件工程_软件工程就业前景...
- 时间序列分析和预测(含实例及代码)
- 电脑c盘垃圾文件太多怎么办?这几个文件夹可以放心删
- 手把手带你入门 Spring Security
- 纯css实现tooltip文字浮框
- 每日一学:洛必达法则及其使用条件
- 快速傅里叶变换(FFT)的原理及公式
热门文章
- 为什么别人靠聊天找到了女朋友?因为他会这三招
- html参考文献_毕业设计参考文献格式(要求与范例)
- 怎么理解汉罗塔问题_小白理解的汉诺塔中的递归问题
- 点阵字体显示系列之三:使用ncurses显示汉字
- log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
- Windows下配置多个Tomcat9
- JSP和FreeMarker的比较
- Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包
- 60-200-072-使用-命令-MySQL使用mysqldumpslow分析慢查询日志文件
- 【Elasticsearch】Elasticsearch mapping 映射对象