我通過的HttpRequest加載一個js文件,並從得到的文本嘗試分析一個特定的字符串(在這種情況下的註釋),但我有正則表達式的麻煩。使用JavaScript正則表達式來提取評論從在一個函數
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文件 - 已經完成
- 查找傳遞 到getHTML名稱匹配內SampleTest功能和返回整個功能通過串正則表達式。
- 使用另一個正則表達式從 函數的字符串中開始/ *提取字符串:DOM和以* /結束這應該可以成爲儘管爲了簡單起見,我只用一條線一個多行註釋。
- 最後,更換所有的垃圾,如*的和:DOM其中 應該離開我的HTML字符串。
我不能簡單地在文件中搜索關於蝙蝠的註釋,因爲該文件可能包含多個函數,每個函數都會有自己的註釋。爲了把這一切都放在上下文中,我這樣做是因爲我希望能夠在運行中爲JavaScript單元測試加載HTML。該功能最終會遍歷單元測試對象的所有功能,得到了HTML,加載,運行功能,刪除HTML,並移動到下一個功能。
UPDATE 由於從接受的答案海報各方面的幫助,我能得到的一切工作。然而,我卻不得不做出一些調整,比如增加了對多行註釋的支持,以及在事後更換所有的垃圾字符,所以我可以得到一個純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;
}
}
}
你是否意識到你的ajax調用是異步的,你不能期望在'.send()'之後結果可用?你需要一個'onreadystatechange'處理程序來知道ajax調用何時實際完成並且數據可用。所以,我認爲你首先需要修復步驟1. – jfriend00 2012-04-06 16:40:28
謝謝,我只是測試很快,結果正在返回,所以我還沒有到處添加onreadystatechange。懶惰,我知道。 – ryandlf 2012-04-06 16:58:41
如果您爲此使用JSON,將會更容易,而不是嘗試從源代碼中提取信息作爲字符串。 – 2012-04-06 17:02:01