问一个正则表达式的问题 regex: [[aa]]目标串: a[]为什么结果匹配为:[] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是所有的语言都支持字符组[]的嵌套的,我所了解的语言中,目前只有。NET支持JavaScript中既然不支持,那么对[[aa]]的解释自然就不是“[”、“]”、“a”三个字符中的任意一个了此时应该是[[aa]]也就是第一个“[”和第一个“]”组成字符组,最后一个“]”只是普通字符“]”而已此时由前面的字符组“[[aa]”也就相当于“[\[a]”来匹配字符“[”,由最后的“]”来匹配字符“]”<script type="text/javascript"> var test = "a[]";var reg = /[[aa]]/;document.write(test.match(reg));</script>/*-------输出-------[]*/将第二个“]”转义,此时就是一个字符组了[[aa\]]看一下输出<script type="text/javascript"> var test = "a[]";var reg = /[[aa\]]/;document.write(test.match(reg));</script>/*-------输出-------a*/这种正则,也仅仅是在学习研究时出现,实际应用中绝不允许出现容易得到无法预期的结果,也难以维护 学习了。原来如此。.net下我只知道[]中间的[]需要转义,还真没想过嵌套使用。 在.NET中,不构成歧义的情况下,“[”和“]”可以不用转义,程序也可以得到预期结果,但是这种写法可读性较差,而且出现错误时不易排查,因此不推荐这种写法 举例:Regex reg = new Regex("[^]]+"); //不推荐 .NET的字符组中支持集合减法,语法[set1-[set2]],例如[a-z-[aeiou]]表示除元音外的小写字母。但是除非你很了解这种语法的支持范围,以及确实有必要这样做,否则不要轻易使用这种可读性较差的语法。事实上完全可以用多个范围区间[b-df-hj-np-tv-z],在区间较多,导致可读性差、容易出错的情况下,可以使用正向预搜索来实现以上需求,(?![aeiou])[a-z],这种语法规则,支持范围要大得多,可读性也要好一些。其实在任何语言中,无论是否支持字符组嵌套或是自动转义处理,都不推荐直接嵌套使用,如确实有必要在字符组中出现“[”和“]”时,一定要做转义处理 模式窗口时能调用打印预览功能吗?怎么老是出错呢? 如何处理有特殊字符的参数? 如何使得javascript支持多种浏览器 String.prototype的问题... jquery.uploadify上传插件修改获取文件大小的误差 请问用js或asp如何实现饼图??能否用js在客户端独立实现?? 菜鸟奉上一盘得分的题目 表格问题 请问在javascript中如何处理字符串 用javascript能不能去掉对话框和网页标题栏上的文字? 关于PRE标签的用法问题 关于正则表达式 的exec 问题
JavaScript中既然不支持,那么对[[aa]]的解释自然就不是“[”、“]”、“a”三个字符中的任意一个了
此时应该是
[[aa]]
也就是第一个“[”和第一个“]”组成字符组,最后一个“]”只是普通字符“]”而已
此时由前面的字符组“[[aa]”也就相当于“[\[a]”来匹配字符“[”,由最后的“]”来匹配字符“]”
<script type="text/javascript">
var test = "a[]";
var reg = /[[aa]]/;
document.write(test.match(reg));
</script>
/*-------输出-------
[]
*/将第二个“]”转义,此时就是一个字符组了
[[aa\]]
看一下输出
<script type="text/javascript">
var test = "a[]";
var reg = /[[aa\]]/;
document.write(test.match(reg));
</script>
/*-------输出-------
a
*/这种正则,也仅仅是在学习研究时出现,实际应用中绝不允许出现
容易得到无法预期的结果,也难以维护