前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录下两个正则表达式的使用

记录下两个正则表达式的使用

作者头像
GhostZhang
发布2022-08-21 10:16:58
3700
发布2022-08-21 10:16:58
举报
文章被收录于专栏:CSS森林CSS森林

记录下两个正则表达式的使用

Ghostzhang 发表于 2009-11-27 11:15

昨天在做mergeCSS的时候遇到两个正则匹配的问题,也花了不少的时间,最后在CSS森林群的 CE 同学帮助下,才完成了这俩正则,特别记录下,以后可能也会用到。

第一个是匹配图片路径的问题,要处理的字符串是:

代码语言:javascript
复制
background:url(demo.jpg);background-image:url(demo.gif);

我一开始写的是:

代码语言:javascript
复制
url\((.*)\)

得到的结果为:

代码语言:javascript
复制
url(demo.jpg);background-image:url(demo.gif);

可以看到,把两个图片匹配成了一个,结果不是所希望得到的。把它改为惰性匹配,如下:

代码语言:javascript
复制
url\((.*?)\)

得到的结果为:

代码语言:javascript
复制
url(demo.jpg);
url(demo.gif);

匹配到了两个图片,是所要的结果了。:)

第二个问题是正则表达式中使用变量的问题,简单解释下为什么加变量也会成为问题,先看下 RegExp 对象replace() 方法 的说明,Javascript的正则一般的书写方式是:

代码语言:javascript
复制
/正则表达式/匹配模式

所有在“/”中间的内容都会被当成正则表达式,于是变量名也就被当成字符串了。不加“/”?也行,不过不加“/”的话就不能指定匹配模式,也就只能匹配到第一个。

通过RegExp对象可以生成一个新的 RegExp 对象,具有指定的模式和标志。

于是:

代码语言:javascript
复制
new RegExp("url\\((" + 变量名 + ")\\)", "g");

这里要注意的是使用“\\”的方式的方式进行转义,因为

如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。

这个过程中“\\”会被转换成“\”,即上面的结果是:

代码语言:javascript
复制
/url\((变量内容)\)/g
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2009-11-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 记录下两个正则表达式的使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档