根據你想繼續用提取的docblocks做什麼,想到多種方法。如果你只需要沒有進一步引用的docblocks,String.match()就足夠了。否則,你可能需要塊的索引。
正如其他人已經指出的,JavaScript的RegEx機器是一切,但功能強大。如果你習慣了PCRE,這感覺就像用雙手綁在背後一樣工作。 [\s\S]
(空格字符,非空格字符)相當於dotAll - 也捕獲換行符。
這應該讓你開始:
var string = 'var foo = "bar";'
+ '\n\n'
+ '/** @Method: setSize'
+ '\n * @Description: setSize DESCRIPTION'
+ '\n * @param: setSize PARAMETER'
+ '\n */'
+ '\n'
+ 'function setSize(setSize) { return true; }'
+ '\n\n'
+ '/** @Method: foo'
+ '\n * @Description: foo DESCRIPTION'
+ '\n * @param: bar PARAMETER'
+ '\n */'
+ '\n'
+ 'function foo(bar) { return true; }';
var docblock = /\/\*{2}([\s\S]+?)\*\//g,
trim = function(string){
return string.replace(/^\s+|\s+$/g, '');
},
split = function(string) {
return string.split(/[\r\n]\s*\*\s+/);
};
// extract all doc-blocks
console.log(string.match(docblock));
// extract all doc-blocks with access to character-index
var match;
while (match = docblock.exec(string)) {
console.log(
match.index + " characters from the beginning, found: ",
trim(match[1]),
split(match[1])
);
}
我不知道正則表達式是你在處理多行和解析邏輯取決於它是否是第一個/最後使用這一個最好的工具/中間線... – 2012-02-13 15:09:03