试图将注释从JS文件中刮出。想着我可以创建一个函数来输入.js文件,执行RegExp匹配并使用fs.readFile()和string.match();输出字符串数组。
这是一个过于简化的示例:
我有两个文件class.js(用于读取)和parse.js(用于执行文本解析)
class.js:
/*
by: Mike Freudiger
*/
/**
* one
* @returns 'Hello World'
*/
function one () {
return 'Hello World';
}
alert();
/* end of file */
parse.js:
var fs = require('fs');
var file = fs.readFile('C:\\Users\\mikef\\Desktop\\node_regex_test\\class.js', 'utf8', function(err, doc) {
var comments = doc.match(/(\/\*\*(.|\n)+?\*\/)/g);
console.log(comments);
});
当我运行节点parse.js时,控制台输出为空。
但是,当我在多行字符串上运行正则表达式匹配时,会得到预期的输出:
var doc = `/*
by: Mike Freudiger
*/
/**
* one
* @returns 'Hello World'
*/
function one () {
return 'Hello World';
}
alert();
/* end of file */`
有人知道为什么readFile()字符串的行为与字符串文字不同吗?
...此外,我意识到,使用另一个npm包或其他东西可能会有更好的方法来发表这些评论,但现在我真的只是想知道为什么这两个字符串不同。
答案 0 :(得分:1)
如vsemozhetbyt所述,class.js
文件中使用的换行符似乎是\r\n
或\r
。
匹配这些换行符的最简单(最快)方法之一是在正则表达式中使用[\s\S]
而不是(.|\n)
。
因此您得到:
var fs = require('fs');
var file = fs.readFile('C:\\Users\\mikef\\Desktop\\node_regex_test\\class.js', 'utf8', function(err, doc) {
var comments = doc.match(/(\/\*\*[\s\S]+?\*\/)/g);
console.log(comments);
});