javascript 正则表达式小案例
写一个简单的正则表达式应用
原有字符串:
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,结果正是要实现的效果。