2012-06-18 79 views
2

我試圖獲取下面提到的字符串正則表達式不是容貌相似,串

<a href="./products/" class="link">Products </a> 

<a href="./servicesandsolutions/" class="link">Services & Solution </a> 

正則表達式中使用開始和結束標記之間的內容合作對於第一個字符串正常工作,但不能與後來一次

+0

@LevLevitsky:我想你編輯向正則表達式中引入了幾個錯誤。什麼是所有的反斜槓? –

+0

恢復爲原始正則表達式。 LevLevitsky,你爲什麼要改變這一點? –

+0

一旦我刪除了反斜槓,我就有正規風暴抱怨效率低下。這可能是因爲它不能和第二個工作,因爲它更長 - 表達效率低下導致它翻倒到超時 –

回答

0

只是擺脫標籤。

var str = '<a href="./products/" class="link">Products </a>' 
var str2 = '<a href="./servicesandsolutions/" class="link">Services & Solution </a>' 
var RE_findOpenAndCloseTag = /^<[^>]+>|<\/[^>]>$/g; 

str.replace(RE_findOpenAndCloseTag, '') == "Products "; 
str2.replace(RE_findOpenAndCloseTag, '') == "Services & Solution "; 

注意RE_findOpenAndCloseTag假定標籤總是先從<和不含>除非它的關閉標記。 因此這將失敗。 「>「>這將失敗

但是,一個更簡單的方法是將標籤轉換爲一個節點,然後得到的innerHTML。

0

通常,你不想來解析HTML與正則表達式你的自我,解析器處於更好

假設你正在使用PCRE這裏是在表達一個隨機猜測你正在尋找:。

(?is)<([a-z]+)\b[^<>]*(?:>(.*?)</\1>|/>) 

注意,這不會與嵌套標籤工作

1

爲什麼這麼複雜?不會簡單/>([^<]+)</捕獲元素的內容?

+0

不與'「Products」'工作內容。 –

+1

...和其他成千上萬的情況下,也沒錯。但是,我們應該(再次尚)重新寫在正則表達式的HTML解析器 - 或者這裏只是解決一個簡單的具體情況? – raina77ow

+0

問題的關鍵是知道所有的細節之前,我們不能關閉任務。我在這裏多次說過:**如果OP不需要它,那麼嘗試構建通用解決方案就沒有意義了!**對於預期的用例進行迭代要簡單得多,直到您獲得我們需要的結果。 – raina77ow

1

根據正則表達式的味道 - 用前瞻和回顧後發的方法來獲取之間>和<即

(?<=>)[^>]*(?=<) 

(?<=>)只是比賽 - 展望爲>

(?=<) - 向後看了<

[^>]* - 與鏈接本身的文字相匹配

前瞻和回顧後是零寬度匹配,從而將只會得到你所需要的

+0

+爲簡單起見,雖然後臺瀏覽器不支持許多流行的正則表達式工具(並且,Javascript是,可悲的是,其中之一)。但是再一次,OP使用哪個平臺是個謎。 – raina77ow

相關問題