注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

前端攻城师 郭培的博客

Be the best you can

 
 
 

日志

 
 
关于我

前端技术:http://hszy00232.blog.163.com/ 前端设计:http://blog.sina.com.cn/hsjs00232 职业:web前端工程师 现居地:北京 My QQ:365246295 Mail:hszy00232@163.com

网易考拉推荐

javascript 正则表达式小案例  

2011-05-04 16:15:33|  分类: javascript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

写一个简单的正则表达式应用

原有字符串:

var a = "string = 'abc'",b = "number = '123'"

想通过正则表达式替换成:

var a="",b=""

接下来看我操作的过程

1.

//var a = "string = 'abc'",b = "number = '123'"
var str = "var a = \"string = \'abc\'\",b = \"number = \'123\'\"";
var reg = /['"][\w]+['"]/g;
document.write(str.replace(reg,
'""'));

输入结果:

var a = "string = """,b = "number = """

这时发现只把abc和123替换掉成了双引号,为什么呢

主要是\w的使用:

\w 匹配包括下划线的任何单词字符。等价于 '[A-Za-z0-9_]'。

因为在"string = "中包含=及空格,所以不能匹配

接下来我做了个调整:

2.

//var a = "string = 'abc'",b = "number = '123'"
var str = "var a = \"string = \'abc\'\",b = \"number = \'123\'\"";
var reg = /['"][\w\W]+['"]/g;
document.write(str.replace(reg,
'""'));

这时输出结果:

var a = ""

这个是因为正则默认是贪婪匹配,它会匹配最多值,所以直接把string = 'abc'",b = "number = '123'都匹配到了。

接下来禁止它的贪婪匹配,

?  当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

按下来做的调整:

3.

var str = "var a = \"string = \'abc\'\",b = \"number = \'123\'\"";
var reg = /['"][\w\W]+?['"]/g;
document.write(str.replace(reg,
'""'));

输出结果:

var a = ""abc""number = """

这时的匹配结果还是有问题

它把“"string = '”做成了一组进行了匹配,也就是当正则搜索到一个引号时无论是单引号还是双引号都默认成一组,这个是由['"]决定的。应该是做到如果开始匹配的是单引号,那结束也要匹配成单引号。这个如何实现呢?

\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。

接着继续做出修改:

4.

var str = "var a = \"string = \'abc\'\",b = \"number = \'123\'\"";
var reg = /(['"])[\w\W]+?\1/g;
document.write(str.replace(reg,
'""'));

结果输出:

var a = "",b = ""

OK,结果正是要实现的效果。

  评论这张
 
阅读(668)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017