大学寝室等通用网络共享方式 (视情况需交换机/路由)

刚进大学的时候, 还可用使用Connectify, 不过随着这家伙的普及, 也很快被Dr.COM封杀了. 后来一直使用的是通过无线路由中转, 然后在其中一台电脑上架设代理来实现共享网络. 虽然前后遇到过一些升级, 但经过调整总算是还能正常使用, 下面就介绍下具体的方式和所需要的软件.

首先需要选定一台主机, 用来登录相关账号, 比如我们的是Dr.COM, 需要一款代理软件, 推荐Privoxy. 这里需要说明的是, 可能有些同学联网的客户端会进行代理软件检测, 或许Privoxy不能幸免, 但只要稍作修改即可. 绝大多数检测代理是通过关键字, 比如这里的Privoxy就是Dr.COM的一个关键字. 所以只要改掉这个关键字就好. 如果你懂得一点编程知识, 可以自己下载源码, 在源码中全局替换之后进行编译. 不过Privoxy编译Windows版本还比较麻烦, 所以不推荐这种方式. 这时需要一个可以编辑字节文件的软件, 比如010 Editor. 使用010 Editor, 查找并替换Privoxy主程序中所有的 “Privoxy” 字符串为另一个长度相等的字符串. 比如我改的是 “PcgPrvx”. 当然如果使用其他专门用于编辑这些资源的编辑器, 可以不用一定长度相等, 但这里为了保证没其他问题, 取相同长度.

改好Privoxy程序之后, 需要修改其配置文件, 一般为config.txt, 内容可以全部删除掉, 只写一行, 9257这里是代理端口:

listen-address :9257

当然如果你有耐心看都有哪些设置自然最好了. 更多信息官网上也有提供.

之后就是进行防火墙相关的设置了, 这个就不细说啦. 完成后, 这台电脑就成了一个代理服务器啦. 不过还需要别的电脑能连接到它, 才能真正用起来… 我们学校的情况是, 同一台交换机下的设备无法互相访问, 所以在完成上面的设置之后, 其他交换机上的同学已经可以通过我的IP和代理端口访问网络, 但同一台交换机下的同学, 比如寝室里的, 则不行. 这个时候就需要一台路由器或者自己的交换机啦. 话说买个无线的路由/交换机还是很方便的, 比插网线舒服多了… 将需要共享的设备连接到同一个路由或者交换机下, 然后则可以通过相应的IP和端口访问网络了. 至于两台设备是否可以正常互相访问, 可以互ping IP看看.

还有一个问题, 比如也是我们学校, 不允许使用自己的路由器, Dr.COM会检测, 如果发现则断开网络连接, 这个时候则必须使用交换机. 多数路由器都是可以当做交换机使用的, 具体设置请自行搜索. 🙂

最后再推荐ProxyCap作为共享网络的客户端, 可以把全部程序添加到代理中, 免得麻烦. 否则像QQ等, 还需要更改代理设置, 有些软件甚至根本不支持代理设置… 另外使用ProxyCap之后, 自己的科学上网软件也工作正常, 其实这个才是用它的最大动力啦…

正则表达式匹配JavaScript字符串字面量

第一次遇到这个问题, 是大概两年前写代码高亮, 从当时的解决方案到现在一共有三代, 嘎嘎. 觉得还是算越来越好的.

第一代:

//那个时候自己正则还不算很精通, 也没有(?:...)这种习惯, 是以寻找结束引号为入口写出的这个正则. 思路混乱, 也存在错误.
//比如像字面量 "abc\\\"", 则会匹配为 "abc\\\", 而正确的结果应该是 "abc\\\"".
var re = /('('|.*?([^\\]'|\\\\'))|"("|.*?([^\\]"|\\\\")))/g;

第二代:

//这个匹配其实和第一代思路基本相同, 也是寻找结束引号, 通过给\\添加*解决了第一代的bug.
var re = /(['"])(?:.*?[^\\](?:\\\\)*)?\1/g;

第三代:

//老实说第三代是昨天晚上出题的时候突然想出来的(后来又修改过), 支持多行字符串字面量, 思路也有了较大的转变, 从匹配结束引号变味了匹配中间内容.
var re = /(['"])(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*?\1/g

这里有一个正则里非常常用的技巧, 姑且称之为 “抢占”, 在诸如/a|./这样的正则里, 越靠前越先匹配, 通过 “抢占” 一些字符, 可以避开很多麻烦. 说起来有些抽象, 在上面这个例子里, /\\[\s\S]/就可以很自然地抢到 \” 这样的转义字符, 所以不必担心转义字符中的 ” 给匹配造成影响. 这是局部的 “抢占”, 还有更大范围的, 比如注释里的字符串或者字符串里的注释, 只要在同一个正则中, 把相关匹配都写入, 则一定是先遇到的优先. 如 /(注释正则)|(字符串正则)/g, 可以先通过这样的方式, 把内容匹配出来, 再进行进一步判断处理.

虽然可能对于多数人来说, 用处不大, 但万一呢? Best wishes~