2012-04-15 66 views
0

相當簡單的HTML(省略號表明,有更多的代碼):正則表達式使用JavaScript的匹配更是應該

...Profile"> 
Some text 
</a>... 

使用JavaScript的上線的正則表達式測試儀(http://regexpal.com/)我可以提取「一些文本」(注意,它包含新行)以下表達式:

(?=Profile">)[\s\S]*(?=</a) 

(不幸的是,看起來,屁股不被JavaScript的支持,所以我也提取的東西「>後來刪除此問題是,但是,下面的代碼

var ShowContent = document.getElementById(id); 
ShowContent = ShowContent.innerHTML; 
var patt3=/Profile">[\s\S]*(?=<)/; 
var GetName=patt3.exec(ShowContent); 
alert(GetName); 

不提取什麼,在線測試儀顯示,而且它包括整個HTML代碼,「一些文本」後(IE,不僅結束< /a而且一切之後)。

有沒有人有任何建議?

+0

http://stackoverflow.com/questions/10008839/why-use-dom-to-parse-webpages-instead-of-regex – Andreas 2012-04-15 19:30:30

+1

*有沒有人有任何建議* - 是? 。不使用正則表達式來解析HTML將是一個很好的開始。 – Tomalak 2012-04-15 19:38:06

+0

謝謝。將來肯定會學習DOM,但我現在需要一個臨時解決方案。 – mrinterested 2012-04-15 19:50:47

回答

2

當你確信所提供的字符串不包含可能存在的缺陷(如<input value='Profile">'>,與[^<]*(任何東西,但<)取代[\s\S]*

var patt3 = /Profile">([^<]*)/; 
var getName = patt3.exec(ShowContent); 
getName = getName ? getName[1] : ''; // If no match has been found -> empty string 

alert(getName); 

(我也換成GetNamegetName,因爲以大寫字母開頭的駝峯變量通常表示一個構造函數,堅持約定,並且不要使用大寫字母來啓動非構造函數)

+0

當* alredy是一個DOM(免費!),你可以使用它來提取一個節點的值時,使用正則表達式有什麼意義? – Tomalak 2012-04-15 19:43:01

+1

@Tomalak該問題沒有包含足夠的信息來發布有關DOM遍歷的答案。不過,它確實包含了查明案文的明確條件。 – 2012-04-15 19:45:04

+0

@Rob W非常感謝!是的,我將用它作爲臨時解決方案,但會花時間學習DOM,以便以後更新我的家庭代碼。 – mrinterested 2012-04-15 19:49:38

0

您可能會更好地使量詞無法理解。試試這個正則表達式:

/Profile">([\s\S]*?)(?=<)/