如何解决正则表达式可以在调试器中使用,但不能在JavaScript中使用
我想在第一个空行之前获取文本文件中的所有内容。
我找到了working regex,但是当我尝试在Javascript中完成同样的操作时,这是行不通的。
(正在加载文件的内容)
async function readDir() {
return new Promise((resolve,reject) => {
fs.readdir('./content',(err,files) => {
if(err) { reject(err) }
resolve(files)
});
});
}
readDir().then((files) => {
files.forEach(file => {
var filepath = path.resolve('./content/'+file)
if(filepath.endsWith('.txt')) {
if(fs.statSync(filepath)["size"] > 0) {
let data = fs.readFileSync(filepath).toString();
let reg = /^[\s\S]*?(?=\n{2,})/;
console.log(data.match(reg)) //returns null
}
}
});
})
编辑:
正如O. Jones所指出的那样,问题出在行尾。我的正则表达式未在文件中出现的\r\n
行结尾处获取。
就目前而言,这似乎已经做好了:/^[\s\S]*?(?=(\r\n\r\n?|\n\n))/m
解决方法
您似乎希望将自己的re匹配到文件的整个多行内容。您需要使用多行标志来做到这一点。
尝试一下
let reg = /^[\s\S]*?(?=\n{2,})/m;
在收盘m
结束后通知/
。有关更多说明,请参见此处的带有标志的高级搜索部分:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
另外,您可能遇到行尾麻烦。 Linux / FreeBSD / UNIX系统使用\n
或换行符来标记每行的结尾。 Mac使用\r
来代替。 Windows使用\r\n
,每行末尾两个字符。是的,我们都知道这是xxx脖子上的疼痛。
因此,空行检测器可能太简单了。 Regular Expression to match cross platform newline characters尝试使用它来匹配跨OS的行尾
\r\n?|\n
表示返回值后跟可选的换行符,或者只是换行符。
它可能看起来像这样。
let reg = /^[\s\S]*?(?=(\r\n?|\n)(\r\n?|\n))/m;
那会连续查找两个行尾模式(抱歉,未经我测试)。
,您可能要尝试:
const EOL = require('os').EOL; // system newline.
const regex = new Regex('^.*?(?=' + EOL + EOL + ')','s'); // everything before first two newlines.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。