缘由:
开发Flex时调用到SWC文件的类库,想通过注释catalog.xml的script标签来屏蔽一部分类包,然后自己重写。但是由于标签过多,手动注释只会累死人,只能用正则替换来注释script标签。
替换内容:
<script name="com\error......> <dep ....../> <dep ....../> </script> <script name="com\warn......> <dep ....../> <dep ....../> </script> <script name="com\error......> <dep ....../> <dep ....../> </script>
匹配逻辑:
1.以<script开头
2.以</script>结尾
3.中间必须包含name="com\error字串
4.中间不包含字串script
<(script)( name="com)(/error)(\b((?!\1).*?)+\b)(.*?)(</\1>)正则不解释了,匹配逻辑有所不同的请自行分析参考。
正确替换内容:
<!--<$1$2$3$6$7-->
正确替换结果:
<!--<script name="com\error......> <dep ....../> <dep ....../> </script>--> <script name="com\warn......> <dep ....../> <dep ....../> </script> <!--<script name="com\error......> <dep ....../> <dep ....../> </script>-->
之前我在网上找到很多的正则,都是有问题的。
错误替换结果:
<!--<script name="com\error......> <dep ....../> <dep ....../> </script> <script name="com\warn......> <dep ....../> <dep ....../> </script> <script name="com\error......> <dep ....../> <dep ....../> </script>-->可以看到,上面匹配时把"com\warn"的script标签也注释掉了,因为这个正则匹配的只是头尾,中间没有排除掉script标签的单词,这是贪婪模式下的匹配结果。