使用Javascript正则表达式从函数中提取注释
Using Javascript Regular Expression to Extract a Comment From Within a Function
我正在通过httprequest加载一个js文件,并试图从生成的文本中解析一个特定的字符串(在本例中为注释),但正则表达式有问题。
function SampleTest() {
this.test1 = function() {
/* :DOM <div id="sampleDIV">You loaded the sample div</div> */
};
this.test2 = function() {
/* :DOM <div>Second Div Loaded</div> */
}
}
在另一个脚本中,我有以下功能:
var getElementFromComment = function(obj) {
function getHTML(method) {
var httpRequest = new XMLHttpRequest();
httpRequest.open('GET', 'SampleTest.js', false);
httpRequest.send();
var response = httpRequest.responseText;
var re = new RegExp(method); //Not sure how to implement the regex
var result = response.match(re);
console.log(result);
}
for(var method in obj) {
getHTML(method);
}
}
var sampleTest = new SampleTest();
getElementFromComment(sampleTest);
最终的结果应该是根据传入的函数名从SampleTest中的注释中提取HTML。在我的情况下,我将遍历所有函数,并逐个检索每个函数的HTML字符串。我认为正确的方法是:
- 通过httprequest获取Javascript文件-已完成
- 在SampleTest中查找与传递的名称匹配的函数转换为getHTML,并通过regex将整个函数作为字符串返回
- 使用另一个正则表达式从函数字符串以/*:DOM开头,以*/结尾。这应该是一个多行注释,尽管为了简单起见,我只使用了一行
- 最后,替换所有垃圾,如*和:DOM应该给我留下一个html字符串
我不能简单地在文件中搜索注释,因为文件可能包含多个函数,每个函数都有自己的注释。为了把这一切放在上下文中,我之所以这么做,是因为我希望能够动态地为javascript单元测试加载HTML。该函数最终将遍历单元测试对象中的所有函数,获取HTML,加载它,运行该函数,删除HTML,然后转到下一个函数。
更新多亏了接受答案海报上的所有帮助,我才得以让一切顺利进行。然而,我确实做了一些调整,比如添加对多行注释的支持,以及替换所有垃圾字符,这样我就可以得到一个纯HTML字符串。我更新的代码如下。
function getHTML(method, str) {
var commentMatch;
var re = new RegExp(method+'''s*=''s*function[^}]+''*/'); //Not sure how to implement the regex
var fnMatch = str.match(re);
if(fnMatch) {
var fnEx = new RegExp(''/'*'s*:[^'s]+'s*(.*?|'n)'*'/', 'g');
commentMatch = fnMatch[0].match(fnEx);
var result = commentMatch[0].replace(/('s*:DOM's*)|('*'/)|('/'*)|('*)/gm, '');
result = result.replace(/^'s*/gm, '');
if(commentMatch) {
return result;
}
}
}
如果你想从javascript字符串变量中的一段javascript代码中提取注释字符串,你可以这样做:
var str = "function SampleTest() { '
this.test = function() { '
/* :DOM <div id='"sampleDIV'">You loaded the sample div</div> */ '
}; '
}";
var matches = str.match(/'/'*'s*:DOM's*(.*?)'*'//);
if (matches) {
alert(matches[1]);
}
在此处进行演示:http://jsfiddle.net/jfriend00/hWCwA/
如果":DOM"部分并不总是相同的,那么您可以使用一个稍微不同的版本,如
var str = "function SampleTest() { '
this.test = function() { '
/* :DOM <div id='"sampleDIV'">You loaded the sample div</div> */ '
}; '
}";
var matches = str.match(/'/'*'s*:[^'s]+'s*(.*?)'*'//);
if (matches) {
alert(matches[1]);
}
在此处进行演示:http://jsfiddle.net/jfriend00/qpF3k/
好吧,根据你的评论,这是另一个例子。这将在函数名称后找到下一个评论。它将停止查看第一个}
,因此如果这个函数没有注释,它就不应该进入下一个函数。
function findComment(funcName, str) {
var commentMatch;
var re = new RegExp("this''." + funcName + "''s*=''s*function[^}]+''*/");
var funcMatch = str.match(re);
if (funcMatch) {
commentMatch = funcMatch[0].match(/'/'*'s*:[^'s]+'s*(.*?)'*'//);
if (commentMatch) {
return(commentMatch[1]);
}
}
return null;
}
相关文章:
- 在数据提取完成之前进行页面渲染
- Javascript中的备选注释方法
- html5视频中的Youtube类型注释
- 如何在Javascript中从字符串中提取某些单词
- RegEx JavaScript:数字后的符号提取
- 如何在内联依赖项并将图像转换为dataURI的情况下完全提取网页
- 如何允许在TinyMCE中使用valid_elements进行注释标记
- Regex提取URL返回数组的一部分;未定义”;
- 如何提取“;href"最近列表项中的属性值
- 使用时刻.js从日期时间中提取时间
- 使用xgettext从JavaScript中提取翻译器注释(在Python模式下)
- 如何使用正则表达式从字符串中提取块注释
- 使用Javascript正则表达式从函数中提取注释
- regex来提取html注释属性
- Angular-gettext从javascript文件中提取注释
- C#Regex删除C风格的注释并提取括号之间的文本
- Node.JS提取类注释
- JavaScript Regex表达式,用于从html注释中提取数据
- PHP+AJAX+jQuery注释/回复系统在提取第一个回复后停止工作
- 使用javascript match和/或replace提取注释