Javascript 函数返回空值,即使存在匹配项
我试图将正则表达式与文件中的某些数据进行匹配,但是,即使数据中明确存在匹配项,match函数也会返回null 我尝试了相同的数据和正则表达式,它显示了一个匹配 下面是代码Javascript 函数返回空值,即使存在匹配项,javascript,node.js,regex,Javascript,Node.js,Regex,我试图将正则表达式与文件中的某些数据进行匹配,但是,即使数据中明确存在匹配项,match函数也会返回null 我尝试了相同的数据和正则表达式,它显示了一个匹配 下面是代码 var fs = require('fs'); try { var data = fs.readFileSync('File.txt', 'utf8'); data = data.toString(); var regex = /^(hi|hI|Hi|HI)\s[^dD].*?$/gm; v
var fs = require('fs');
try {
var data = fs.readFileSync('File.txt', 'utf8');
data = data.toString();
var regex = /^(hi|hI|Hi|HI)\s[^dD].*?$/gm;
var result = data.match(regex);
} catch(e) {
console.log('Error:', e.stack);
}
这些是文件的内容
Hi Alex how are you doing
hI dave how are you doing
Good by Alex
hidden agenda
Alex greeted Martha by saying Hi Martha
我在RegExr上使用了相同的数据,它将第一行显示为匹配。但是当我在我的机器上运行上述代码时,结果变量仍然为空
有什么我遗漏的吗
下面是我在vscode中调试代码时的一些屏幕截图
我在cmd上运行了这个程序,令人震惊的是字符串前面有一个空格。JSON输出中的空格似乎是空的。如果是这样,
data.codepoint(0)
应该是65279
当您使用fs.readFileSync
读取文件时,BOM表不会从读取的数据中剥离,而是由程序员来处理。看
你可以用
data = data.replace(/^\uFEFF/, '')
这将删除BOM表(如果存在),然后您可以运行正则表达式
注意:在文本编辑器(如VIM、记事本)中打开文本文件时,您不会看到BOM表,因为它们可以处理BOM表 通过以上@vsemozhetbyt的回答和许多有用的评论,问题已经解决了 我添加这个答案是为了帮助将来遇到问题的人 为什么会这样? 由于一些错误的编码,在我的特殊情况下,File.txt最初是File.jsp,我将其扩展名改为.txt并保存了它。 在此之后,我阅读了file.txt,其中包含与JSP相同的文本,并进行了相同的正则表达式匹配。它工作正常,文件中没有BOM表 当我在记事本中打开文件并用问题中显示的5行文本替换所有内容并保存时,问题出现了 什么是BOM 读这本好书 我是如何删除BOM的 我在vim中以二进制模式使用
vim -b File.txt
我删除了前三个字符(字节)FYI,您的正则表达式也可以写成
/^hi\s[^d].*/gmi
您的代码对我来说很好。您如何知道结果
为空
?您发布的代码中没有任何内容检查result
的值。您的实际代码中是否有console.log()
?@nologin,这绝对没有什么区别;正则表达式文本没有什么问题。可能您加载了错误的文件!你能做一下console.log(JSON.stringify(data))并告诉我们你得到了什么吗?(请不要截图)