最近的工作是项目移植
需要把大量的lua脚本转译成js脚本(cocos2dx升级cocoscreator)
因此也学习了一下强大的正则表达式
通过notepad++,使用宏录制,正则表达式替换的方法
实现了半自动化脚本转译
原文地址:http://www.cnblogs.com/billyrun/articles/6576248.html
具体来说
简单的部分比如local->var可以用基本的替换操作
而表转数组/表转关联数组
以及匿名函数/本地函数/成员函数的转换
就必须依靠正则表达式了
首先替换lua数组{}为js数组[]
这里只处理真数组,不处理其他种类表
匹配字\{([^=\{\}]+)\}替换[\1] #说明:确保{}内没有=号,真数组
--转换前 local arr1 = {1,2,3,4,5,6} local arr2 = { 1, 2, 3, 4, 5, 6} //转换后 local arr1 = [1,2,3,4,5,6] local arr2 = [ 1, 2, 3, 4, 5, 6]
之后替换lua表为js关联数组
匹配字(\{[^=\{\}]+)=([^\}]+\})替换\1:\2 #说明:左边不能包含=号右边可以包含,按顺序替换表中的=为:
目前不支持表嵌套
--转换前 local tb1 = {t1 = 1 , t2=2, t3=3} local tb2 = { t1 = 1 , t2=2, t3=3 } //转换后 local tb1 = {t1 : 1 , t2:2, t3:3} local tb2 = { t1 : 1 , t2:2, t3:3 }
ps.为什么有先有后?因为lua里面只有table会用到{}
所以只用先后转为js数组和js关联数组,就可以保证这两者转译正确
另外还有一些简单的办法
可以在function后面加上{等等(单行匹配)
匹配字function (.+\))替换function \1{
正则表达式匹配代码中的中文硬编码
'[^x00-xff^)^'^\s]
匹配中英文换行
^\r\n[35a-zA-Z][a-zA-Z0-9_: ,-?'()<>]*\r\n\r\n
^[35a-zA-Z][a-zA-Z0-9_: ,-?'()<>]*\n\n
参考资料
http://deerchao.net/tutorials/regex/regex.htm
QQ:393422044
Email:fkrfkrfkr@163.com