作家
登录

javascript 正则表达式相关应介绍

作者: 来源:www.28hudong.com 2013-03-30 00:20:13 阅读 我要评论

string 对象 1、str.match(RegExp) 在str中搜索匹配RegExp的字符串并保存在一个数组内返回, 如果RegExp不是全局设置(/g),仅匹配一次 复制代码 代码如下: ("abc112dwfwabcwef2abc3wfwabcasqf453abcqwf24j234h").match(/abcd*/g); //结果 ["abc112", "abc", "abc3", "abc", "abc"] 该方法中,如果正则表达式不是全局匹配模式(g标记),第一个元素将是匹配的字符串,其余是正则中捕获的字符串,并且该数组具备2个属性: input 用于检测的字符串 index 匹配的字符串在用于检测字符串中的开始位置。 (关于这2个属性可以参考 RegExp.exec() 方法) 2、str.search(regExp) 返回符合匹配RegExp的第一个字符串的位置,如果没有匹配返回-1,全局标记没有意义,因为只匹配一次, 该方法也忽略 regExp 的 lastIndex 属性,并且总是从字符串的开始进行检索。 3、str.replace(RegExp,replaceText) 将匹配RegExp 的字符串替换为replaceText,如果 RegExp 没有全局设置,只匹配一次,使用全局模式将替换所有匹配的字符串。 如果RegExp 中使用了捕获分组匹配,则replaceText中的$具有特殊含义 $1、$2、...、$99 //与 RegExp 中的第 1 到第 99 个子表达式相匹配的文本。 $& // 与 regexp 相匹配的子串。 $` // 位于匹配子串左侧的文本。 $' // 位于匹配子串右侧的文本。 $$ // 匹配$符号自身。 注意,你需要考虑RegExp中捕获分组的数量,如果你只设置了2个捕获,那$3将不再具有特殊含义 ("123ab12c11d_4532").replace(/a(bd*)c(d*)d/,"$1@$2-") //将得到: "123b12@11-_4532" 4、str.replace(RegExp,function) str.replace 的第二个参数可以是函数,函数的返回值将作为匹配字符的替换内容, 注意,如果要全局匹配RegExp仍然需要全局g标记。 函数的参数依次是: 匹配的字符串, 配置的捕获子串(多个), 匹配字符串的开始位置, 用于匹配的原字符串 注意,请根据RegExp中捕获分组的设置数量来定义函数参数个数,如果参数太少将可能导致“匹配字符串的开始位置” 和 “用于匹配的原字符串” 不能在参数中出现,当然也可以在函数内使用arguments对象解决这个问题,arguments(arguments.length-2) 就是匹配字符串的开始位置,arguments(arguments.length-1) 就是 用于匹配的原字符串。 复制代码 代码如下: var newStr = ("123ab12c11d_4532").replace(/a(bd*)c(d*)d/g,function(s,s1,s2,pos,oldStr){ return "@"+s1+"@"+s2+"@"; }) ; //将得到 "123@b12@11@_4532" 5、str.split(RegExp[,limit]) 将字符串str用符合匹配的字符串分割成数组,limit 可选,用于限定返回的数组长度 ("ada2afa4fcas6afa").split(/d/,3) // "ada,afa,fcas" 6、RegExp.exec("str") 方法 在str中查找匹配的字符串,注意,每次运行该方法只匹配一次,要匹配多个需要将RegExp设置为/g,并多次运行exec()方法,每次匹配返回值 result = RegExp.exec("str") result为一个数组,这个数组长度为1,数组元素为找到的匹配的子串, 另外,这个数组被额外赋给了2 个属性: result.index 表示匹配的子串在原字符串的开始位置 result.input 就是原字符串 当再也无法找到符合匹配的子串时,返回 result = null,并设置 RegExp.lastIndex=0 RegExp.lastIndex 是正则表达式的属性,表示当前将从字符串的哪个位置开始匹配,初始值为0。 如果RegExp被设置为全局的,在匹配一个字符串一次之后,使用同一个RegExp对一个新的字符串进行匹配请先手动设置 RegExp.lastIndex=0 如果RegExp 不是全局匹配模式,在程序中又写了一个循环,根基返回值 result来决定是否终止匹配,从而试图匹配完这个字符串,那么,只要有符合匹配条件的子串,就必定造成死循环,因为非全局匹配只对字符串匹配一次,结果每次运行匹配操作都是匹配第一个子串,返回的 result 不为空,这是个比较容易犯的错误。 复制代码 代码如下: var str = "1Visit W3School, W3School is a place to study web technology."; var patt = new RegExp("W3School","g"); var result; document.write(patt.lastIndex+"<br />"); document.write("=====================================<br />"); while ((result = patt.exec(str)) != null) { document.write(patt.lastIndex+"<br />"); document.write(result.constructor.name+"<br />"); document.write(result.length+"<br />"); document.write(result[0]+"<br />"); document.write(result.index+"<br />"); document.write(result.input+"<br />"); document.write("=====================================<br />"); } document.write(patt.lastIndex+"<br />"); // 运行结果: ===================================== Array W3School Visit W3School, W3School is a place to study web technology. ===================================== Array W3School Visit W3School, W3School is a place to study web technology. ===================================== 7、RegExp.test("str") 方法 该方法与 RegExp.exec 类似,不同的是仅返回true或false RegExp.lastIndex 的含义是一样的(这是RegExp的属性,跟是使用test方法还是exec方法无关) 如果同一个RegExp 先后使用了test方法和exec方法,你可能需要手动设置 RegExp.lastIndex=0,这些方法是共享同一个RegExp对象的lastIndex 属性的 复制代码 代码如下: var str = "1Visit W3School, W3School is a place to study web technology."; var patt = new RegExp("W3School","g"); var result ; result = patt.test(str); alert(result); //true result = patt.test(str); alert(result); //true result = patt.test(str); alert(result); //false IE9+ 、较新版本的 chrome、firefox 中 , str.match(reg) 执行完毕后,无论是否全局匹配,是否存在匹配结果 ,lastindex 被重置,reg.lastIndex = 0 , reg.test(str) 执行后,如果正则是非全局匹配的,lastindex 被重置, re.lastIndex = 0 在 IE8 及以下,正则匹配执行后除非没有匹配结果,否则 re.lastIndex 是最后一个匹配字符串的结尾字符的位置 +1,即lastIndex 没有被重置

  推荐阅读

  js实现拖拽 闭包函数详细介绍

js拖拽 采用简单的闭包实现方式 复制代码 代码如下: /** * Created with JetBrains WebStorm. * User: lsj * Date: 12-11-24 * Time: 下午12:59 * To change this template use File | Settings | File Templates.>>>详细阅读


本文标题:javascript 正则表达式相关应介绍

地址:http://www.17bianji.com/kaifa2/JS/22928.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)