匹配由IO返回的行的开始处的奇怪行为#阅读
问题描述:
这是我今天上午遇到的。我已经得到了很多的JavaScript文件写在CMD模式是这样的:匹配由IO返回的行的开始处的奇怪行为#阅读
define(function(require, exports) {
// code goes here
})
我有一个简单的Ruby脚本来处理这些文件的结果是这样的:
define(['module-a', 'module-b'], function(reuqire, exports) {
// code
})
这样,我已经做了它是通过打开这些文件,阅读其内容,看它们是否匹配/^define\(function/
,然后替换他们,如果他们这样做:
code = File.open('foo.js').read
if code =~ /^define\(function/
# do some work
end
怪异的一部分是,该代码将不匹配,经常expressi上。第2行返回nil
。这将工作:
code = "define(function(require, exports) {\n"
code =~ /^define\(function/ # ==> 0
它只是如果代码使用IO#read
读返回nil
。然而字符串的开始工作:
code = File.open('foo.js').read
code =~ /.define\(function/m # ==> 0
code[0] # ==> "" returns an empty string
但不^
匹配所有的行开始?
答
奇怪的字符串竟然是该文本文件的BOM。这个项目的一些同事用UTF-8保存了文件,这是我们同意使用的编码和BOM。
这里的解决方案:Is there a way to remove the BOM from a UTF-8 encoded file?
答
在“define”之前检查\ n以外的空格吗?特别是\ r。 。 。
为我工作。什么'IO#read'返回? – halfelf 2013-03-08 05:05:59
@halfelf成功返回文件内容 – nil 2013-03-08 05:09:18
随着Ruby 1.9.3,也适用于我。 – toch 2013-03-08 08:19:28