2010-05-12 78 views
0

Csharp的正則表達式:JavaScript的正則表達式問題

Regex rg = new Regex("(?i)(?<=>)[^<]+(?=</TD>)"); 

JavaScript的正則表達式:

var pattern = (?i)(?<=>)[^<]+(?=</TD>); 

var result = str.match(pattern); 

Csharp的正則表達式模式的工作原理,但JavaScript的正則表達式模式行不通請幫助?

+6

您應該接受以前問題的答案。 – Alsciende 2010-05-12 13:21:49

+5

您正試圖使用​​正則表達式解析HTML。請不要這樣做,這是錯誤的,危險的,完全沒有必要的。 – Tomalak 2010-05-12 13:25:27

+0

@Alsciende請幫助你的代碼不起作用 – Chicharito 2010-05-12 13:40:46

回答

2

假設你在一個字符串形式有一個HTML片段,並在瀏覽器中,試圖用JavaScript來使用它:

var str = "<TD>33,7</TD><TD>100</TD><TD>20,0</TD>"; 

var temp = document.createElement("tr"); 
temp.innerHTML = str; 

var tds = temp.getElementsByTagName("td") 
for (var i=0; i<tds.length; i++) { 
    alert(tds[i].textContent); // use .innerText in Internet Explorer 
} 

看到了嗎?沒有必要的正則表達式 - 瀏覽器內置了一個功能完善的HTML解析器,不需要自己創建。當使用像jQuery JavaScript框架,上面變得更簡單:

$("<TD>33,7</TD><TD>100</TD><TD>20,0</TD>").find("td").each(function() { 
    alert($(this).text()); 
}); 
0

有沒有lookbehinds,或在JavaScript RE內聯改性劑。所以我們將(?i)移動到正則表達式的末尾://i。在回顧後是有點難以模仿,所以它更容易只接受一個事實,即它不能做,而是使用捕捉組來找到你所需要的:

var pattern = />([^<]+)<\/TD>/i; 
var result = str.match(pattern); 

// the match you want is in result[1] 

編輯:看起來工作精細您提供兩個字符串:

"<td class='asd'>sd</td>".match(/>([^<]+)<\/TD>/i) 
// [">sd</td>", "sd"] 

如果你想匹配相同的字符串多個項目可以 AB 使用replace()方法是這樣的:

var textInTds = []; // empty array we will fill up: 
"<td>bla1</td><td class='asd'>sd</td>".replace(/>([^<]+)<\/TD>/ig, function($0, $1) { 
    textInTds.push($1); // push onto the array 
    return $0; // return the original text so that it doesn't destroy the string 
}); 

// textInTds -> ["bla1", "sd"] 
+0

請輸入​​bla1工作但其他'td'sd不能工作其他td – Chicharito 2010-05-12 14:11:02

+0

@oraclee:男孩......你肯定有錯誤的態度。如何評論你得到的實際解決方案,並回答你被問到的問題,而不是「不起作用」和「請幫助」的評論。 – Tomalak 2010-05-12 15:17:41