NodeJS readFileSync and Regex the resulting text
本问题已经有最佳答案,请猛点这里访问。
希望将注释从JS文件中刮出。想着我可以创建一个函数来输入.js文件,执行RegExp匹配并使用fs.readFile()和string.match()输出字符串数组;
这是一个过于简化的示例:
我有两个文件class.js(用于读取)和parse.js(用于执行文本解析)
class.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* by: Mike Freudiger */ /** * one * @returns 'Hello World' */ function one () { return 'Hello World'; } alert(); /* end of file */ |
parse.js:
1 2 3 4 5 6 7 8 | var fs = require('fs'); var file = fs.readFile('C:\\\\Users\\\\mikef\\\\Desktop\\\ ode_regex_test\\\\class.js', 'utf8', function(err, doc) { var comments = doc.match(/(\\/\\*\\*(.|\ )+?\\*\\/)/g); console.log(comments); }); |
当我运行节点parse.js时,控制台输出为null。
但是,当我在多行字符串上运行正则表达式匹配时,会得到预期的输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var doc = `/* by: Mike Freudiger */ /** * one * @returns 'Hello World' */ function one () { return 'Hello World'; } alert(); /* end of file */` |
有人知道为什么readFile()字符串的行为与字符串文字不同吗?
...此外,我意识到也许可以使用另一个npm包或类似的东西来发布这些注释,这是一种更好的方法,但是现在我真的只想知道为什么这两个字符串不同。
如vsemozhetbyt所述,
\
匹配这些换行符的最简单(最快)方法之一是在正则表达式中使用
)
因此您得到:
1 2 3 4 5 6 7 | var fs = require('fs'); var file = fs.readFile('C:\\\\Users\\\\mikef\\\\Desktop\\\ ode_regex_test\\\\class.js', 'utf8', function(err, doc) { var comments = doc.match(/(\\/\\*\\*[\\s\\S]+?\\*\\/)/g); console.log(comments); }); |