Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式在调试器中工作,但不在JavaScript中工作_Javascript_Node.js_Regex_Fs_End Of Line - Fatal编程技术网

正则表达式在调试器中工作,但不在JavaScript中工作

正则表达式在调试器中工作,但不在JavaScript中工作,javascript,node.js,regex,fs,end-of-line,Javascript,Node.js,Regex,Fs,End Of Line,我想在第一个空行之前获取文本文件中的所有内容 我已经找到了一个解决方案,但当我试图用Javascript实现同样的目标时,它就不起作用了 (正在加载文件内容) 异步函数readDir(){ 返回新承诺((解决、拒绝)=>{ fs.readdir('./内容',(错误,文件)=>{ 如果(错误){拒绝(错误)} 解析(文件) }); }); } readDir()。然后((文件)=>{ files.forEach(文件=>{ var filepath=path.resolve('./content

我想在第一个空行之前获取文本文件中的所有内容

我已经找到了一个解决方案,但当我试图用Javascript实现同样的目标时,它就不起作用了

(正在加载文件内容)

异步函数readDir(){ 返回新承诺((解决、拒绝)=>{ fs.readdir('./内容',(错误,文件)=>{ 如果(错误){拒绝(错误)} 解析(文件) }); }); } readDir()。然后((文件)=>{ files.forEach(文件=>{ var filepath=path.resolve('./content/'+文件) if(filepath.endsWith('.txt')){ if(fs.statSync(filepath)[“size”]>0){ 让data=fs.readFileSync(filepath.toString(); 设reg=/^[\s\s]*?(?=\n{2,})/; console.log(data.match(reg))//返回null } } }); }) 编辑:

正如O.琼斯所指出的,问题在于行尾。我的正则表达式无法识别文件中的
\r\n
行结尾


现在,这一个似乎完成了任务:
/^[\s\s]*?(?=(\r\n\r\n?| \n\n))/m

看起来您希望将re与文件的整个多行内容相匹配。您需要使用多行标志来执行此操作

试试这个

let reg = /^[\s\S]*?(?=\n{2,})/m;
请注意re关闭后的
m
。有关更多说明,请参见此处的“带标志的高级搜索”部分:

此外,您可能有线路结束问题。Linux/FreeBSD/UNIX系统使用
\n
又名换行符来标记每行的结尾。Mac使用
\r
也称为返回。Windows使用
\r\n
,每行末尾有两个字符。是的,我们都知道这是多么痛苦的事

所以你的空行检测器可能太简单了。尝试使用此选项来匹配跨操作系统的线条端点

\r\n?|\n
这意味着要么返回后跟可选换行符,要么只是换行符

它可能看起来像这样

let reg = /^[\s\S]*?(?=(\r\n?|\n)(\r\n?|\n))/m;
这将在一行中查找其中两个端点模式(抱歉,我没有测试)。

您可能需要尝试:

const EOL=require('os').EOL;//系统换行。
常量正则表达式=新正则表达式(“^.*”(?=“+EOL+EOL+”),“s”);//前两条新行之前的所有内容。

文件的具体内容是什么?您确定有两个换行符紧跟在一起(即空行中没有其他空格,包括
\r
)?指向正则表达式的链接包括txt文件的确切内容,然后是no,这也适用于javascript。请注意,将文件复制粘贴到文本区域可以更改行尾。我尝试了这个方法,效果很好。文件内容有问题我通过Visual Studio代码文件资源管理器创建了文本文件,并从这里复制粘贴了内容:当我JSON.stringify文件内容时,我得到:“世界大战\r\n10-10-2020\r\n\r\nI。\r\n战争前夕。\r\n\r\n在十九世纪的最后几年里,没有人会相信,这个世界正被比人类更伟大、但也和人类一样致命的智能敏锐而密切地注视着;当男人们忙于自己时。。。对不起,伙计们,我不知道会是什么…对我来说没什么区别。。这可能是文件,请查看我的编辑。也许行尾是个问题。当然,我刚才看到了你的评论。是的,就是这样,尽管你版本的正则表达式只返回了第一行。通过一些修补,我发现这是可行的:
/^[\s\s]*?(?=(\r\n\r\n?| \n\n))/m