博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
神奇的match和replace
阅读量:5113 次
发布时间:2019-06-13

本文共 1965 字,大约阅读时间需要 6 分钟。

源自跟奈落大叔的讨论,PHP和JavaScript的比较。

正则:

先说几个正则写法:

 () 选择匹配一组, (?:) 降低 () 的优先级, .*? 和 .+? ,阻止 . 和 + 的贪婪。

还有一些正则的高级写法:

 (?=) 和 (?<=) ,零宽断言,以及 (?!) 和 (?<!) ,负向零宽,详见:。

以及js里正则常用的方法:

 reg.test(str) 检测reg是否匹配str中的内容,返回true或false。

match:

先来一个例子:

var url="http://www.cnblogs.com/rubylouvre/p/3181291.html#top22";var a=url.match(/t/);       // ["t"]                    // 找一个console.log(a.index);       // 1                        // 找一个,带着它所在的位置(index)url.match(/t/g);            // ["t", "t", "t", "t"]     // 找一堆,不带indexurl.match(/(t)/);           // ["t", "t"]               // 带括号找一个,第一个是结果,第二个是括号里匹配到的内容url.match(/(t)/i);          // ["t", "t"]               // 带括号加i,跟没加一样,没有特殊url.match(/(t)/g);          // ["t", "t", "t", "t"]     // 带括号加g,只有结果url.match(/(?:t)/);         // ["t"]                    // 使用?:取消()的优先级,有index属性url.match(/(?:t)/g);        // ["t", "t", "t", "t"]     // 加上g后依然返回一堆

上面几个,带上g标记,会得到所有匹配的内容,不带g则只会匹配到第一个结果(也是数组),而且这个数组多了index属性,表示匹配内容所在的位置。

而i标记不会影响结果个数,每出现一个 () 都会在匹配结果中增加一项,而改为 (?:) 后则不会增加。即使增加了,也是只匹配出一个结果,数组依然有index属性。

鼓捣了一下午,弄了个高端且粗糙的:

var url="http://www.cnblogs.com/rubylouvre/p/3181291.html#top22";url.match(/(.*?):\/{2}(.*?)\/([^\?#]*(?=\/[^\/]*)[\/$])([^\?#]*)([\?#].*)?/);// ["http://www.cnblogs.com/rubylouvre/p/3181291.html#top22", "http", "www.cnblogs.com", "rubylouvre/p/", "3181291.html", "#top22"]

返回结果:[整个地址,协议名称,域名,文件路径,文件名,hash/search]。

写法有很多,这里只是想用一下 (?=) 方式,以我现在的水平,只要结果对就好。。

replace:

以前用replace,主要是像 str.replace(reg/str,str/function(s){

return fn(s)}); 这样,现在要加上正则的用法:反向引用。

先来一个例子:

var str="abcdefg";str.replace(/([abc])/g,"$&,");                // "a,b,c,defg"str.replace(/([abc])([bcd])/g,"$&,");         // "ab,cd,efg"str.replace(/([abc])([bcd])/g,"$1,$2;");      // "a,b;c,d;efg"

可以在后面的替换字符串里,用 $& 表示匹配出的结果,相当于match结果的第[0]个(其实PHP中就是用 &0 来表示的),用 &n 来表示第n个小括号里匹配出的内容,相当于match结果中的第[n]个。

出了这两个,还有 &` 表示匹配结果左侧的内容, &' 表示匹配结果右侧的内容, $$ 表示替换成一个$符。

收获:

正则里,还有js对正则的使用,都有很多东西值得挖掘。

 

转载于:https://www.cnblogs.com/ccforeverd/p/3897839.html

你可能感兴趣的文章
java学习第三天
查看>>
jq 通配符,模糊查询
查看>>
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
jQuery Mobile笔记
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>
查询数据(后台到前台传递数据,显示数据)
查看>>
集群tomcat+apache配置文档
查看>>
VMware Tools安装
查看>>
2019.04.09 电商20 购物车的展示
查看>>
Linux上架设boost的安装及配置过程
查看>>
[转载]加密算法库Crypto——nodejs中间件系列
查看>>
zoj 2286 Sum of Divisors
查看>>