话说我用 Windows 的时候从来都是漫无止境的死机。原因大约在于我的内存太小硬盘太慢。于是虚拟机里懒得装完整版的 Visual Studio,所以装了一个学习班。但是今天突然看到……
好吧。我记得以前可是从来没有这种东西的。
Drag-and-drop the following link to your bookmarks bar or right click it and add it to your favorites. Then click it when you are at the game page. Have fun.
拖动下面的链接到您的书签栏或右键它然后添加到收藏夹。在游戏界面点击!祝您愉快。
.bookmarklet_link img{display:none}又翻到 phy 同学那可爱的快速复制网页地址等 HTML 代码书签,觉得那功能也太差了点,于是做了一个升级版的。嗯,就是你下面看到的这个。
Refer to this page
拖动这个按钮去你的书签栏吧,目前支持复制成文字、HTML、UBB 代码和仅复制标题四种模式。比如在本页面使用,会生成如下东东:
<a href="http://orzfly.com/weblog/bookmarklet-refer-to-this-page/" target="_blank">Bookmarklet:快速拷贝网页标题及地址(引用) | 陆一尘的博客 | orzFly's Blog</a>
[url=http://orzfly.com/weblog/bookmarklet-refer-to-this-page/]Bookmarklet:快速拷贝网页标题及地址(引用) | 陆一尘的博客 | orzFly's Blog[/url]
Bookmarklet:快速拷贝网页标题及地址(引用) | 陆一尘的博客 | orzFly's Blog http://orzfly.com/weblog/bookmarklet-refer-to-this-page/
Bookmarklet:快速拷贝网页标题及地址(引用) | 陆一尘的博客 | orzFly's Blog
Internet Explorer 8, Chrome 4, Firefox 3.6 测试通过。
今天在写谷歌拼音扩展,希望给出的候选词能按照数字顺序排列,而我在源文件中 table
中 key
已经按顺序写了,可输出仍然是乱序。于是去官网查了点资料,发现一段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | --[[ Ordered table iterator, allow to iterate on the natural order of the keys of a table. Example: ]] function __genOrderedIndex( t ) local orderedIndex = {} for key in pairs(t) do table.insert( orderedIndex, key ) end table.sort( orderedIndex ) return orderedIndex end function orderedNext(t, state) -- Equivalent of the next function, but returns the keys in the alphabetic -- order. We use a temporary ordered key table that is stored in the -- table being iterated. --print("orderedNext: state = "..tostring(state) ) if state == nil then -- the first time, generate the index t.__orderedIndex = __genOrderedIndex( t ) key = t.__orderedIndex[1] return key, t[key] end -- fetch the next value key = nil for i = 1,table.getn(t.__orderedIndex) do if t.__orderedIndex[i] == state then key = t.__orderedIndex[i+1] end end if key then return key, t[key] end -- no more value to return, cleanup t.__orderedIndex = nil return end function orderedPairs(t) -- Equivalent of the pairs() function on tables. Allows to iterate -- in order return orderedNext, t, nil end |
只需要用 orderedPairs()
代替掉 pairs()
即可,但是后来发现我的扩展中若嵌入这么大一段代码,大小就太大了,于是就打算精简下。联想到 .Net 程序的混淆器,我如法炮制,将所有变量名全部混淆,于是得到了下面的代码:
1 | _0=pairs function _1(_6)local _2={}for _4 in _0(_6)do table.insert(_2,_4)end table.sort(_2)return _2 end function _3(_6,_5)if _5==nil then _6._7=_1(_6)_4=_6._7[1]return _4,_6[_4]end _4=nil for _8 = 1,table.getn(_6._7)do if _6._7[_8]==_5 then _4=_6._7[_8+1]end end if _4 then return _4,_6[_4]end _6._7=nil return end function _9(_6)return _3,_6,nil end pairs=_9 |
嗯,你应该看出来了我直接将 pairs
用 orderedPairs
(这里其实是 _9
)覆盖了。
总之,这个对于平常的开发是无用的,但是对于谷歌拼音扩展则是十分有用。你要是喜欢,欢迎随便转载。我已经提交到官方 wiki 去了。
有个朋友问我一个在复杂文本中提取 URL 的正则表达式,在网上搜索了一下,鼓捣了好久,综合了多方资源,写出这么一个正则表达式:
1 | (?<![a-zA-Z0-9:/])((http|https|ftp)://)?([A-Za-z0-9-]+.)+[A-Za-z]{2,}(:[0-9]+)?[./=?%-&_~`@[]':+!]*([^""])*?(?![/=?%-&_~`@[]':+!A-Za-z0-9.]) |
加上点注释,我们来分析下:
1 2 3 4 5 6 7 8 | (?<![a-zA-Z0-9:/])(?#去掉左侧无用字符) ((http|https|ftp)://)?(?#协议) ([A-Za-z0-9-]+.)+(?#域名) [A-Za-z]{2,}(?#TLD) (:[0-9]+)?(?#端口号) [./=?%-&_~`@[]':+!]*(?#分隔符) ([^""])*?(?#网址) (?![/=?%-&_~`@[]':+!A-Za-z0-9.])(?#去掉右侧无用字符) |
于是能看懂了么?
测试了些正常的 URL,都很正确。
测试了些不正确的 URL:
参考资料: